public void Read()
{
byte[] MyData = new byte[0]
using (SqlConnection conn = new SqlConnection(sqlconnstr))
{
conn.Open()
SqlCommand cmd = new SqlCommand()
cmd.Connection = conn
cmd.CommandText = "select * from T_img"
SqlDataReader sdr = cmd.ExecuteReader()
sdr.Read()
MyData = (byte[])sdr["ImgFile"]//读取第一个图片的位流
int ArraySize= MyData.GetUpperBound(0)//获得数据库中存储的位流数组的维度上限,用作读取流的上限
FileStream fs = new FileStream(@"c:\00.jpg", FileMode.OpenOrCreate, FileAccess.Write)
fs.Write(MyData, 0, ArraySize)
fs.Close() //-- 写入到c:\00.jpg。
conn.Close()
Console.WriteLine("读取成功")//查看硬盘上的文件
}
}
二进制数据由十六进制数表示,可以使用 binary、varbinary和 image数据类型存储。
binary固定长度(最多为8K)的二进制数据类型。
binary[ ( n) ] 固定长度的 n个字节二进制数据。N必须从 1 到 8,000。存储空间大小为 n+4 字节。
varbinary可变长度(最多为8K)的二进制数据类型。
varbinary[ ( n) ]n个
字节变长二进制数据。n必须从 1 到 8,000。存储空间大小为实际输入数据长度 +4个字节,而不是
n个字节。输入的数据长度可能为 0 字节。在 SQL-92 中 varbinary的同义词为 binary
varying。
image用来存储长度超过 8 KB 的可变长度的二进制数据。
除非数据长度超过 8KB,否则一般宜用 varbinary 类型来存储二进制数据。一般用来存放
Microsoft Word 文档、Microsoft Excel 电子表格、包含位图的图像、图形交换格式 (GIF) 文件和联合图像专家组 (JPEG)
文件。
在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server
解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。
参考下列C# 代码:
private void Page_Load(object sender, System.EventArgs e)
{
//get the image id from the url
string ImageId = Request.QueryString["img"]
//build our query statement
string sqlText = "SELECT img_data, img_contenttype FROM Image WHERE img_pk = " + ImageId
SqlConnection connection = new SqlConnection( ConfigurationSettings.AppSettings["DSN"].ToString() )
SqlCommand command = new SqlCommand( sqlText, connection)
//open the database and get a datareader
connection.Open()
SqlDataReader dr = command.ExecuteReader()
if ( dr.Read()) //yup we found our image
{
Response.ContentType = dr["img_contenttype"].ToString()
Response.BinaryWrite( (byte[]) dr["img_data"] )
}
connection.Close();
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)