数据库为Oracle8.05,因此不好用Oracle类库,在此使用OLEDB类。
我看到MSDN上的一篇文章
http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158
我这样导出照片也是可以的,但是就是有的照片会残缺不全,用Acdsee打开的时候,下面显示"源数据流被破坏",请教这是什么问题呢?
//函数ExportPhotos:导出照片文件
private void ExportPhotos()
{
string TempSQLStr = "SELECT * FROM PHOTO WHERE PHOTO IS NOT NULL"; //全部导出
if(OpearteAppConfig.ReadSetting("ExportType") != "All") //增量导出
{
TempSQLStr = TempSQLStr + " AND SCBZ = '0'";
}
//OleDbDataAdapter
OleDbDataAdapter TempOleDbDataAdapter = new OleDbDataAdapter();
TempOleDbDataAdapter.TableMappings.Clear();
TempOleDbDataAdapter.TableMappings.Add("Table","PHOTO"); //OleDbCommand
OleDbCommand TempCommand = new OleDbCommand(TempSQLStr,ConnOracle);
TempCommand.CommandType = CommandType.Text;
TempOleDbDataAdapter.SelectCommand = TempCommand; //DataSet
DataSet TempDataSet = new DataSet();
TempDataSet.Clear();
TempOleDbDataAdapter.Fill(TempDataSet);
//progressBar_Unit
int TotalCount = TempDataSet.Tables["PHOTO"].Rows.Count; //照片纪录数
progressBar_Unit.Value = 0;
progressBar_Unit.Minimum = 0;
progressBar_Unit.Maximum = TotalCount; for(int i=0;i<TotalCount;i++)
{
Application.DoEvents();
object PhotoType; //照片类型
object PhotoScbz; //上传标志位
string PhotoFileName; //照片文件名 PhotoType = TempDataSet.Tables["PHOTO"].Rows[i]["TYPE"].ToString();
PhotoScbz = TempDataSet.Tables["PHOTO"].Rows[i]["SCBZ"].ToString(); if(PhotoType.ToString() == "" | PhotoType is DBNull)
{
PhotoType = "1";
} if(PhotoScbz.ToString() == "" | PhotoScbz is DBNull)
{
PhotoScbz = "1";
} //创建照片的文件名称
PhotoFileName = Directory.GetCurrentDirectory() +"\\SEND\\";
PhotoFileName = PhotoFileName + TempDataSet.Tables["PHOTO"].Rows[i]["LFFH"].ToString();
PhotoFileName = PhotoFileName + "_" + PhotoType + PhotoScbz + ".jpg"; //PhotoData
byte[] PhotoData= new byte[0];
DataRow TempDataRow = TempDataSet.Tables["PHOTO"].Rows[i];
PhotoData = (byte[])TempDataRow["PHOTO"];
int ArraySize = new int();
ArraySize = PhotoData.GetUpperBound(0); FileStream fs = new FileStream(@PhotoFileName,FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(PhotoData, 0,ArraySize);
fs.Close();
statusBarPanel2.Text = "已导出照片 " + (i+1) + " 张";
progressBar_Unit.Value++;
}
}
我看到MSDN上的一篇文章
http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158
我这样导出照片也是可以的,但是就是有的照片会残缺不全,用Acdsee打开的时候,下面显示"源数据流被破坏",请教这是什么问题呢?
//函数ExportPhotos:导出照片文件
private void ExportPhotos()
{
string TempSQLStr = "SELECT * FROM PHOTO WHERE PHOTO IS NOT NULL"; //全部导出
if(OpearteAppConfig.ReadSetting("ExportType") != "All") //增量导出
{
TempSQLStr = TempSQLStr + " AND SCBZ = '0'";
}
//OleDbDataAdapter
OleDbDataAdapter TempOleDbDataAdapter = new OleDbDataAdapter();
TempOleDbDataAdapter.TableMappings.Clear();
TempOleDbDataAdapter.TableMappings.Add("Table","PHOTO"); //OleDbCommand
OleDbCommand TempCommand = new OleDbCommand(TempSQLStr,ConnOracle);
TempCommand.CommandType = CommandType.Text;
TempOleDbDataAdapter.SelectCommand = TempCommand; //DataSet
DataSet TempDataSet = new DataSet();
TempDataSet.Clear();
TempOleDbDataAdapter.Fill(TempDataSet);
//progressBar_Unit
int TotalCount = TempDataSet.Tables["PHOTO"].Rows.Count; //照片纪录数
progressBar_Unit.Value = 0;
progressBar_Unit.Minimum = 0;
progressBar_Unit.Maximum = TotalCount; for(int i=0;i<TotalCount;i++)
{
Application.DoEvents();
object PhotoType; //照片类型
object PhotoScbz; //上传标志位
string PhotoFileName; //照片文件名 PhotoType = TempDataSet.Tables["PHOTO"].Rows[i]["TYPE"].ToString();
PhotoScbz = TempDataSet.Tables["PHOTO"].Rows[i]["SCBZ"].ToString(); if(PhotoType.ToString() == "" | PhotoType is DBNull)
{
PhotoType = "1";
} if(PhotoScbz.ToString() == "" | PhotoScbz is DBNull)
{
PhotoScbz = "1";
} //创建照片的文件名称
PhotoFileName = Directory.GetCurrentDirectory() +"\\SEND\\";
PhotoFileName = PhotoFileName + TempDataSet.Tables["PHOTO"].Rows[i]["LFFH"].ToString();
PhotoFileName = PhotoFileName + "_" + PhotoType + PhotoScbz + ".jpg"; //PhotoData
byte[] PhotoData= new byte[0];
DataRow TempDataRow = TempDataSet.Tables["PHOTO"].Rows[i];
PhotoData = (byte[])TempDataRow["PHOTO"];
int ArraySize = new int();
ArraySize = PhotoData.GetUpperBound(0); FileStream fs = new FileStream(@PhotoFileName,FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(PhotoData, 0,ArraySize);
fs.Close();
statusBarPanel2.Text = "已导出照片 " + (i+1) + " 张";
progressBar_Unit.Value++;
}
}
Dim w As BinaryWriter = New BinaryWriter(fs1)
w.Write(OleDbDataReader("photo"))
w.Close()
fs1.Close()
OleDbDataReader.Close()但是那种方法使用OleDbDataReader写的,我觉得效率不高。