.net C#,access,MDB数据库BLOB二进制字段的读写
2007-10-23 09:04
651 查看
BLOB二进制字段读写,一致是一个十分麻烦的事情,本人在总结前人的基础,特对access,MDB数据库BLOB的读写总结如下:
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
using System.IO;
namespace Book
...{
/**//// <summary>
/// Db_Class 的摘要说明。
/// </summary>
public class Db_Class
...{
private OleDbConnection Conn;
private OleDbCommand cmd;
//构造函数
public Db_Class(String MDBFileName, String Password)
...{
String Str = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet Oledb:Database Password={1}", MDBFileName, Password);
Conn = new OleDbConnection(Str); //连接数据库,Password是MDB的密码
//by 闫磊 Email:Landgis@126.com,yanleigis@21cn.com 2007.10.13
}
//打开数据源链接
public OleDbConnection Db_Conn()
...{
Conn.Open();
return Conn;
}
//返回DataReader数据集,下面的SQL可以动态生成
public OleDbDataReader Db_CreateReader(string SQL)
...{
try
...{
cmd = new OleDbCommand(SQL, Conn);
OleDbDataReader Rs = cmd.ExecuteReader();
return Rs;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return null;
}
}
//返回DataReader数据集,下面的SQL是存储过程
public OleDbDataReader Db_CommandReader(string SQL)
...{
try
...{
cmd = new OleDbCommand(SQL, Conn);
cmd.CommandType = CommandType.StoredProcedure;
OleDbDataReader Rs = cmd.ExecuteReader();
return Rs;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return null;
}
}
//返回数据DataSet数据集
public DataSet Db_CreateDataSet(string SQL)
...{
try
...{
cmd = new OleDbCommand(SQL, Conn);
OleDbDataAdapter Adpt = new OleDbDataAdapter(cmd);
DataSet Ds = new DataSet();
Adpt.Fill(Ds, "NewTable");
return Ds;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return null;
}
}
//返回数据DataReader数据集,不需要返回数据的修改,删除可以使用本函数
public bool Db_ExecuteNonquery(string SQL)
...{
try
...{
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
try
...{
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return false;
}
}
finally
...{
this.close();
}
}
//返回数据DataReader数据集,不需要返回数据的修改,删除可以使用本函数
public bool Db_ExecuteNonquery(string SQL, bool Connect)
...{
try
...{
if (Connect)
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
try
...{
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return false;
}
}
finally
...{
if (Connect)
this.close();
}
}
//返回数据DataReader数据集,返回数据
public String Db_Executequery(string SQL)
...{
try
...{
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
try
...{
return cmd.ExecuteScalar().ToString();
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return "";
}
}
finally
...{
this.close();
}
}
//返回数据DataReader数据集,返回数据
public String Db_Executequery(string SQL,String parent, bool connect)
...{
try
...{
if (connect)
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
try
...{
return cmd.ExecuteScalar().ToString();
}
catch (Exception ex)
...{
MessageBox.Show("parent:" + parent + "错误:因" + ex.Message + ",无法执行:" + SQL);
return "";
}
}
finally
...{
if (connect)
this.close();
}
}
//返回blob数据
public MemoryStream getBlob(string SQL)
...{
try
...{
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
cmd.CommandType = CommandType.Text;//是sql
OleDbDataReader Rs = cmd.ExecuteReader();
if (Rs.Read()) //循环到下一条记录
...{
if (!(Rs.GetValue(0) is System.DBNull))
...{
byte[] image_bytes = (byte[])Rs.GetValue(0);
MemoryStream ms = new MemoryStream(image_bytes);
return ms;
}
else
return null;
}
else
return null;
}
finally
...{
this.close();
}
}
//设置blob
public bool SetBlob(string SQL, MemoryStream Ms)
...{
try
...{
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
cmd.CommandType = CommandType.Text;//是sql
int n=Convert.ToInt32(Ms.Length.ToString());
Ms.Position = 0;
byte[] pReadByte = new Byte
;
Ms.Read(pReadByte, 0, n);
cmd.Parameters.Add("BLOB", OleDbType.Binary).Value = pReadByte;
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return false;
}
finally
...{
this.close();
}
}
//关闭数据链接
public void close()
...{
Conn.Close();
}
}
}
说明:
1、getBlob(string SQL)是读BLOB字段,调用例子如下
//by 闫磊 Email:Landgis@126.com,yanleigis@21cn.com 2007.10.23
String sqlStr = "select content from dp where id=" + ID;//content为dp中的BLOB字段,ID为主键
MemoryStream ms = DBClass.getBlob(sqlStr);
if (ms == null)
richTextBox.Clear();
else
...{
if (ms.Length > 0)
...{
ms.Position = 0;
try
...{
richTextBox.LoadFile(ms, RichTextBoxStreamType.RichText);
}
catch
...{
richTextBox.LoadFile(ms, RichTextBoxStreamType.PlainText);
}
}
else
richTextBox.Clear();
}
2、BLOB二进制的写,SetBlob(string SQL, MemoryStream Ms),调用如下
private void SaveData(int ID1)
...{
String sqlStr = "update dp set content=:BLOB where id=" + ID;
MemoryStream ms = new MemoryStream();
richTextBox.SaveFile(ms, RichTextBoxStreamType.RichText);
if (!DBClass.SetBlob(sqlStr, ms))
...{
MessageBox.Show("保存失败");
}
}
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
using System.IO;
namespace Book
...{
/**//// <summary>
/// Db_Class 的摘要说明。
/// </summary>
public class Db_Class
...{
private OleDbConnection Conn;
private OleDbCommand cmd;
//构造函数
public Db_Class(String MDBFileName, String Password)
...{
String Str = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet Oledb:Database Password={1}", MDBFileName, Password);
Conn = new OleDbConnection(Str); //连接数据库,Password是MDB的密码
//by 闫磊 Email:Landgis@126.com,yanleigis@21cn.com 2007.10.13
}
//打开数据源链接
public OleDbConnection Db_Conn()
...{
Conn.Open();
return Conn;
}
//返回DataReader数据集,下面的SQL可以动态生成
public OleDbDataReader Db_CreateReader(string SQL)
...{
try
...{
cmd = new OleDbCommand(SQL, Conn);
OleDbDataReader Rs = cmd.ExecuteReader();
return Rs;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return null;
}
}
//返回DataReader数据集,下面的SQL是存储过程
public OleDbDataReader Db_CommandReader(string SQL)
...{
try
...{
cmd = new OleDbCommand(SQL, Conn);
cmd.CommandType = CommandType.StoredProcedure;
OleDbDataReader Rs = cmd.ExecuteReader();
return Rs;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return null;
}
}
//返回数据DataSet数据集
public DataSet Db_CreateDataSet(string SQL)
...{
try
...{
cmd = new OleDbCommand(SQL, Conn);
OleDbDataAdapter Adpt = new OleDbDataAdapter(cmd);
DataSet Ds = new DataSet();
Adpt.Fill(Ds, "NewTable");
return Ds;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return null;
}
}
//返回数据DataReader数据集,不需要返回数据的修改,删除可以使用本函数
public bool Db_ExecuteNonquery(string SQL)
...{
try
...{
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
try
...{
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return false;
}
}
finally
...{
this.close();
}
}
//返回数据DataReader数据集,不需要返回数据的修改,删除可以使用本函数
public bool Db_ExecuteNonquery(string SQL, bool Connect)
...{
try
...{
if (Connect)
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
try
...{
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return false;
}
}
finally
...{
if (Connect)
this.close();
}
}
//返回数据DataReader数据集,返回数据
public String Db_Executequery(string SQL)
...{
try
...{
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
try
...{
return cmd.ExecuteScalar().ToString();
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return "";
}
}
finally
...{
this.close();
}
}
//返回数据DataReader数据集,返回数据
public String Db_Executequery(string SQL,String parent, bool connect)
...{
try
...{
if (connect)
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
try
...{
return cmd.ExecuteScalar().ToString();
}
catch (Exception ex)
...{
MessageBox.Show("parent:" + parent + "错误:因" + ex.Message + ",无法执行:" + SQL);
return "";
}
}
finally
...{
if (connect)
this.close();
}
}
//返回blob数据
public MemoryStream getBlob(string SQL)
...{
try
...{
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
cmd.CommandType = CommandType.Text;//是sql
OleDbDataReader Rs = cmd.ExecuteReader();
if (Rs.Read()) //循环到下一条记录
...{
if (!(Rs.GetValue(0) is System.DBNull))
...{
byte[] image_bytes = (byte[])Rs.GetValue(0);
MemoryStream ms = new MemoryStream(image_bytes);
return ms;
}
else
return null;
}
else
return null;
}
finally
...{
this.close();
}
}
//设置blob
public bool SetBlob(string SQL, MemoryStream Ms)
...{
try
...{
Db_Conn();
cmd = new OleDbCommand(SQL, Conn);
cmd.CommandType = CommandType.Text;//是sql
int n=Convert.ToInt32(Ms.Length.ToString());
Ms.Position = 0;
byte[] pReadByte = new Byte
;
Ms.Read(pReadByte, 0, n);
cmd.Parameters.Add("BLOB", OleDbType.Binary).Value = pReadByte;
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
...{
MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);
return false;
}
finally
...{
this.close();
}
}
//关闭数据链接
public void close()
...{
Conn.Close();
}
}
}
说明:
1、getBlob(string SQL)是读BLOB字段,调用例子如下
//by 闫磊 Email:Landgis@126.com,yanleigis@21cn.com 2007.10.23
String sqlStr = "select content from dp where id=" + ID;//content为dp中的BLOB字段,ID为主键
MemoryStream ms = DBClass.getBlob(sqlStr);
if (ms == null)
richTextBox.Clear();
else
...{
if (ms.Length > 0)
...{
ms.Position = 0;
try
...{
richTextBox.LoadFile(ms, RichTextBoxStreamType.RichText);
}
catch
...{
richTextBox.LoadFile(ms, RichTextBoxStreamType.PlainText);
}
}
else
richTextBox.Clear();
}
2、BLOB二进制的写,SetBlob(string SQL, MemoryStream Ms),调用如下
private void SaveData(int ID1)
...{
String sqlStr = "update dp set content=:BLOB where id=" + ID;
MemoryStream ms = new MemoryStream();
richTextBox.SaveFile(ms, RichTextBoxStreamType.RichText);
if (!DBClass.SetBlob(sqlStr, ms))
...{
MessageBox.Show("保存失败");
}
}
相关文章推荐
- C#读写数据库Image字段实例
- .Net中保存和读取数据库中Image类型(二进制)字段
- 关于 数据库中 读写 Blob 字段的正确做法。
- c++builder对数据库中BLOB字段读写
- C#操作Access格式数据库(MDB)
- .net从数据库二进制字段下载附件(文件),解决中文乱码
- C#写入和读取数据库blob字段代码
- 使用JDK自带的JDBC-ODBC驱动对Access进行BLOB字段读写
- C#读写数据库Image字段实例
- 使用JDK自带的JDBC-ODBC驱动对Access进行BLOB字段读写
- .net 文件上传至数据库二进制字段 及读取操作。
- [VB.NET源码]读写MDB数据库ACCESS
- C# Access 二进制文件读写
- C# asp.net 导出数据库二进制字段到excel
- SQLITE3 读写二进制字段blob
- c#读写MSSQL数据库image字段内容
- .net c#中获取数据库中指定长度的字段以及字段的前几位
- 飞信虚拟机运行.net程序 使用Access的mdb数据库
- c#读写MSSQL数据库image字段内容
- .NET — Examples of use (连接池,更新blob字段,事件,备份,恢复,取数据库系统信息)