转自:http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158
标题:How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NET
The GetChunk and the AppendChunk methods are not available in ADO.NET on DataReader columns, DataSet columns, orCommand parameters. This article describes how to use Visual C# .NET to read and write binary large object (BLOB) fields.
Requirements
The following list outlines the recommended hardware, software, network infrastructure, and service packs that are required:- Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, or Windows NT 4.0 Server
- Microsoft Visual Studio .NET
- Microsoft SQL Server
Create the Project
- Add a table named MyImages to your SQL Server Northwind database. Include the following fields in your table:
- Identity field that is named "ID" of type Int.
- Field that is named "Description" of type VarChar with a length of 50.
- Field that is named "ImgField" of type Image.
- Start Visual Studio .NET, and then create a new Visual C# Windows Application project.
- Drag two Button controls from the toolbox to the default form, Form1.
- In the Properties window, change the Text property of Button1 to Save to Database (from File), and then change the Textproperty of Button2 to Save to File (from Database).
- Add the following code to the top of the Code window:
using System.Data; using System.Data.SqlClient; using System.IO;
- Double-click Button1, and then add the following code to the Button1_Click event handler.
Note Uid <user name> must have permissions to perform these operations on the database.{ SqlConnection con = new SqlConnection("Server=Darkover;uid=<username>;pwd=<strong password>;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(); }
- Double-click Button2, and then add the following code to the Button2_Click event handler.
Note Uid <user name> must have permissions to perform these operations on the database.{ SqlConnection con = new SqlConnection("Server=Darkover;uid=<username>;pwd=<strong password>;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(); }
- Press F5 to compile and to run the application.
- Click Save to Database (from File) to load the image, C:\WinNT\Gone Fishing.bmp, into the SQL Server Image field.
- Click Save to File (from Database) to save the data from the SQL Server Image field back to a file.