首页 > 编程 > .NET > 正文

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

2024-07-10 13:07:28
字体:
来源:转载
供稿:网友
菜鸟学堂:

本文引用下面的 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 字段的数据保存回文件中。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表