本文引用下列 Microsoft .NET Framework Class Library 命名空间:
System.Data.SqlClient
System.IO
摘要
GetChunk 和 AppendChunk 方法在 ADO.NET 的 DataReader 列、 DataSet 列、 或 Command 参数中已不可用. 本文描述如何使用 Visual C# .NET 读写 binary large object (BLOB) 字段.
要求
以下是推荐的硬件、软件、网络结构和服务包要求列表:
Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, 或 Windows NT 4.0 Server
Microsoft Visual Studio .NET
Microsoft SQL Server
创建项目
1. 添加一个名为 MyImages的表到 SQL Server Northwind 数据库。 表字段设置如下:
唯一标识字段名称为"ID",类型为Int。
名称为"Description"的VarChar类型的字段,字段长度为50。
名称为"ImgField" 的Image 类型的字段。
2. 启动 Visual Studio .NET, 并创建一个新的 Visual C# Windows 应用程序项目。
3. 从工具栏中托两个Button 控件到默认窗体, Form1。
4. 在属性窗口中修改Button1的 Text 属性为从文件保存到数据库, 然后修改Button2 的 Text 属性为从数据库保存到文件。
5. 在代码窗口的顶部添加下列代码:
6. using System.Data;
7. using System.Data.SqlClient;
using System.IO;
8. 双击 Button1, 并添加下列代码到 Button1_Click 的事件处理器中:
9.
{
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();
}
10. 双击 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();
}
11. 按 F5 以编译并运行程序。
12. 点击 从文件保存到数据库 加载图象 C:\WinNT\Gone Fishing.bmp 到 SQL Server Image 字段。
13. 点击 从数据库保存到文件 以从 SQL Server Image 字段保存数据到文件。