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

来源:互联网 发布:php如何获取表单数据 编辑:程序博客网 时间:2024/04/29 23:22
本文引用下面的 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. 将下面的代码添加到"代码"窗口顶部:
  1. using System.Data;   
  2. using System.Data.SqlClient;   
  3. using System.IO;    
  4. //6. 双击 Button1,然后将以下代码添加到 Button1_Click 事件处理程序中:    
  5. class ExampleOfLegalsoft   
  6. {   
  7.     public void OnClick1()   
  8.     {   
  9.         SqlConnection con = new SqlConnection("Server=Darkover;uid=sa;pwd=Password1;database=northwind");   
  10.         SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con);   
  11.         SqlCommandBuilder MyCB = new SqlCommandBuilder(da);   
  12.         DataSet ds = new DataSet("MyImages");   
  13.         da.MissingSchemaAction = MissingSchemaAction.AddWithKey;   
  14.         FileStream fs = new FileStream(@"C:/winnt/Gone Fishing.BMP", FileMode.OpenOrCreate, FileAccess.Read);   
  15.         byte[] MyData = new byte[fs.Length];   
  16.         fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));   
  17.         fs.Close();   
  18.         da.Fill(ds, "MyImages");   
  19.         DataRow myRow;   
  20.         myRow = ds.Tables["MyImages"].NewRow();   
  21.         myRow["Description"] = "This would be description text";   
  22.         myRow["imgField"] = MyData;   
  23.         ds.Tables["MyImages"].Rows.Add(myRow);   
  24.         da.Update(ds, "MyImages");   
  25.         con.Close();   
  26.     }   
  27. //7. 双击 Button2,然后将以下代码添加到 Button2_Click 事件处理程序中:    
  28.     public void OnClick2()   
  29.     {   
  30.         SqlConnection con = new SqlConnection("Server=Darkover;uid=sa;pwd=Password1;database=northwind");   
  31.         SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con);   
  32.         SqlCommandBuilder MyCB = new SqlCommandBuilder(da);   
  33.         DataSet ds = new DataSet("MyImages");   
  34.         byte[] MyData = new byte[0];   
  35.         da.Fill(ds, "MyImages");   
  36.         DataRow myRow;   
  37.         myRow = ds.Tables["MyImages"].Rows[0];   
  38.         MyData = (byte[])myRow["imgField"];   
  39.         int ArraySize = new int();   
  40.         ArraySize = MyData.GetUpperBound(0);   
  41.         FileStream fs = new FileStream(@"C:/winnt/Gone Fishing2.BMP", FileMode.OpenOrCreate, FileAccess.Write);   
  42.         fs.Write(MyData, 0, ArraySize);   
  43.         fs.Close();   
  44.     }   
  45. }  
8. 按 F5 键编译并运行该应用程序。
9. 单击"保存到数据库(从文件)",将位于 C:/WinNT/Gone Fishing.bmp 的图像加载到 SQL Server Image 字段。
10. 单击"保存到文件(从数据库)",将 SQL Server Image 字段的数据保存回文件中。