C#中通过使用ADO.NET读写BLOB数据

ado|数据

本文引用下面的 Microsoft .NET 框架类库名称空间: • System.Data.SqlClient 
• System.IO

本任务的内容
• 概要
  • 要求
• 创建项目 
 

概要
在 ADO.NET 中,DataReader 列、DataSet 列或 Command 参数不能使用 GetChunk 和 AppendChunk 方法。本文介绍如何使用 Visual C# .NET 读写二进制大对象 (BLOB) 字段。

返回页首
要求
下面的列表列出了推荐使用的硬件、软件、网络结构以及所需的 Service Pack: • Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server 或 Windows NT 4.0 Server
• Microsoft Visual Studio .NET
• Microsoft SQL Server
返回页首
创建项目
1. 在您的 SQL Server 罗斯文数据库中添加一个名为 MyImages 的表。在该表中包含以下字段: • 标识字段,名为"ID",类型为 Int。
• 字段,名为"Description",类型为 VarChar,长度为 50。
• 字段,名为"ImgField",类型为 Image。

2. 启动 Visual Studio .NET,然后新建一个 Visual C# Windows 应用程序项目。
3. 将两个 Button 控件从工具箱拖到默认窗体 Form1 上。
4. 在"属性"窗口中,将 Button1 的 Text 属性更改为保存到数据库(从文件),将 Button2 的 Text 属性更改为保存到文件(从数据库)。
5. 将下面的代码添加到"代码"窗口顶部:
using System.Data;
using System.Data.SqlClient;
using System.IO;
6. 双击 Button1,然后将以下代码添加到 Button1_Click 事件处理程序中:
{
SqlConnection con = new SqlConnection("Server=Darkover;uid=sa;pwd=Password1;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con);
SqlCommandBuilder MyCB = new SqlCommandBuilder(da);
DataSet ds = new DataSet("MyImages");

da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
FileStream fs = new FileStream(@"C:\winnt\Gone Fishing.BMP", FileMode.OpenOrCreate, FileAccess.Read);

byte[] MyData= new byte[fs.Length];
fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));

fs.Close();

da.Fill(ds,"MyImages");

DataRow myRow;
myRow=ds.Tables["MyImages"].NewRow();

myRow["Description"] = "This would be description text";
myRow["imgField"] = MyData;
ds.Tables["MyImages"].Rows.Add(myRow);
da.Update(ds, "MyImages");

con.Close();

}
7. 双击 Button2,然后将以下代码添加到 Button2_Click 事件处理程序中:
{
SqlConnection con = new SqlConnection("Server=Darkover;uid=sa;pwd=Password1;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con);
SqlCommandBuilder MyCB = new SqlCommandBuilder(da);
DataSet ds = new DataSet("MyImages");

byte[] MyData= new byte[0];

da.Fill(ds, "MyImages");
DataRow myRow;
myRow=ds.Tables["MyImages"].Rows[0];

MyData =  (byte[])myRow["imgField"];
int ArraySize = new int();
ArraySize = MyData.GetUpperBound(0);

FileStream fs = new FileStream(@"C:\winnt\Gone Fishing2.BMP", FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(MyData, 0,ArraySize);
fs.Close();
}
8. 按 F5 键编译并运行该应用程序。
9. 单击"保存到数据库(从文件)",将位于 C:\WinNT\Gone Fishing.bmp 的图像加载到 SQL Server Image 字段。
10. 单击"保存到文件(从数据库)",将 SQL Server Image 字段的数据保存回文件中。

时间: 2024-11-02 02:59:04

C#中通过使用ADO.NET读写BLOB数据的相关文章

使用ADO实现BLOB数据的存取-ADO开发实践之二

一.前言 在上一篇文章<ADO第一次亲密接触>中我们详细介绍了ADO基本的操作方法,在实际的开发过程中我们常常需要存储较大的二进制数据对象,比如:图像.音频文件.或其它二进制数据,这些数据我们称之为二进制大对象BLOB(Binary Large Object),其存取的方式与普通数据有所区别.本文将介绍利用ADO在数据库中存取BLOB数据的具体实现过程,并给出实现图像存取显示的完整示例工程. 二.前期准备 首先我们建立一张名为userinfo的表,包含三个字段:id,username,old,

ado-VC++ADO+SQLServer操作Blob文件的读取

问题描述 VC++ADO+SQLServer操作Blob文件的读取 请问如何才能通过MFC ADO 读出SQL Server中的Blob文件,并保存在一个临时文件中?

Access 中如何使用 ADO 來压缩或修复 MS Access 文件?

access|ado|压缩 Access 中如何使用 ADO 來压缩或修复 MS Access 文件?专题地址:http://access911.net/index.asp?board=4&recordid=71FAB71E  问题: Access 中如何使用 ADO 來压缩或修复 Microsoft Access 文件?   回答: 以前使用 DAO 时,Microsoft 有提供 CompactDatabase Method 來压缩 Microsoft Access 文件,RepairDat

在DELPHI程序中使用ADO对象存取ODBC数据

作为一个ASP爱好者,笔者经常在ASP页面中使用ADO对象操作ODBC数据库,觉得用ASP创建WEB应用系统确定挺方便的.虽然在编程生涯中,笔者更喜欢Borland系列产品,对微软产品有点排斥,对ASP却是例外.某天,灵机一动,ADO对象是一个标准OLE对象,如果在DELPHI应用程序中能利用ADO操作数据库,应该挺不错.尤其在用DELPHI做网络数据库应用程序时,如果所在的WEB站点是WINNT站点并且支持ASP页面,就可以用ADO对象访问ODBC数据库,而不用把那么大的BDE再上载到站点上去

sql语句 #-在VS2010中如何使用ADO.net更新数据操作

问题描述 在VS2010中如何使用ADO.net更新数据操作 我想把数据库中的某一表中的int型的变量取出来,然后进行自减操作,然后再存到数据 库中,具体的C#语句该怎么写呢? 解决方案 SqlConnection conn = new SqlConnection(连接字符串); conn.Open(); SqlCommand cmd = new SqlCommand("update 表名 set 字段=字段+1 where id = xxx", conn); cmd.ExecuteS

Java网络编程从入门到精通(34):读写缓冲区中的数据---使用get和put方法按顺序读写单个数据

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)     对于缓冲区来说,最重要的操作就是读写操作.缓冲区提供了两种方法来读写缓冲区中的数据:get.put方法和array方法.而get.put方法可以有三种读写数据的方式:按顺序读写单个数据.在指定位置读写单个数据和读写数据块.除了上述的几种读写数据的方法外,CharBuffer类还提供了用于专门写字符串的put和append方法.在本文及后面的文章中将分别介绍这

运用 ADO.NET 对象优化数据查询代码

ado|对象|数据|优化    毫无疑问,ADO.NET 向人们提供了一种功能强大.仿真数据库的对象模型,它可以将数据记录保存到内存中.尤其是ADO.net 的 DataSet 类,它不但在功能上相当于数据库表的集中存储器(central repository),而且支持表间的各种约束和逻辑关系.进一步说来,DataSet 对象其实是一种离线数据容器.     乍一看,只要把 DataSet 类的所有特性联合起来,就能消除 SQL 查询命令中的复杂子句,比如那些泛滥成灾且层层嵌套的 INNER

JDBC+Hibernate将Blob数据写入Oracle

oracle|数据 Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢? 这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor用select查询出

请问各位大神,在c#串口通讯中,怎么把接收到的数据保存在Excel表格中?

问题描述 请问各位大神,在c#串口通讯中,怎么把接收到的数据保存在Excel表格中? 本人最近做一个项目时需要把串口接收到的数据进行分析,数据量较大,比如5秒钟保存一次,连续工作一天,本人刚接触c#,串口通讯协议已写好,现在的问题是怎么把数据保存在Excel表格中以便分析?各位大神有没有用C#做过项目,求指教,最好有源代码!本人刚进论坛,没分,如果满意的话以后再补给你!!!!!!!!!急!!!!!! 解决方案 C#操作Excel(创建.打开.读写.保存)几种方法的总结 C#基于微软EXCEL类库