C#写入和读取数据库blob字段代码
==========================================================
try
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "*.*|*.*";
openFileDialog.CheckFileExists = true;
openFileDialog.Title = "选择上传的文件";
if (openFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
{
return;
}
FileStream fileStream = new FileStream(
openFileDialog.FileName, FileMode.Open, FileAccess.Read);
byte[] fileData = new byte[fileStream.length + 1];
fileStream.Read(fileData, 0, (int)fileStream.Length);
string sql = "select * from TABLE_NAME where id = '" + id + "'";
DataSet ds = OA.RsGet(sql, null);
DataRow row;
if (ds.Tables[0].Rows.Count > 0)
{
row = ds.Tables[0].Rows[0];
}
else
{
row = ds.Tables[0].NewRow();
row["ID"] = Guid.NewGuid().ToString("N");
ds.Tables[0].Rows.Add(row);
}
row["FILE"] = fileData;
row["otherField"] = roadWidth;
if (OA.RsUpdate(ds) > 0)
{
MessageBox.Show("保存成功!");
}
}
catch(Exception exc)
{
MessageBox.Show("保存出错!请检查数据。\n" + exc.Message);
}
============================================================
读取数据库blob字段,存成本地文件。
///
/// 读取ORACLEBLOB字段到文件,返回文件名 Add by ZhaoYong |2012-03-21|
///
/// 索引值
/// 索引字段名称
/// 要查询的表名称
/// 存放文件的字段名称
/// 保存到本地的文件名
///
public static bool ReadBlobToFile(string idValue, string idField, string table, string blobField, string outFileFullName)
{
int PictureCol = 0;
outFileFullName = outFileFullName.Trim();
try
{
OracleCommand cmd = new OracleCommand("Select " + blobField + " From " + table +
" Where " + idField + "='" + idValue + "'", OracleDb.OracleDb.Connection);
OracleDataReader myReader = cmd.ExecuteReader();
myReader.Read();
if (myReader.HasRows == false)
{
return false;
}
byte[] b = new byte[myReader.GetBytes(PictureCol, 0, null, 0, int.MaxValue) - 1];
myReader.GetBytes(PictureCol, 0, b, 0, b.Length);
myReader.Close();
System.IO.FileStream fileStream = new System.IO.FileStream(
outFileFullName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
fileStream.Write(b, 0, b.Length);
fileStream.Close();
}
catch
{
return false;
}
return true;
}