The
GetChunk and the
AppendChunk methods are not available in ADO.NET on
DataReader columns,
DataSet columns, or
Command 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 Text property 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.