我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中.
要这里有关数据的 *** 作略写,我将一些代码段写成方法,方便直接调用.
//根据文件名(完全路径)
public byte[] SetImageToByteArray(string fileName)
{
FileStream fs = new FileStream(fileName, FileMode.Open)
int streamLength = (int)fs.Length
byte[] image = new byte[streamLength]
fs.Read(image, 0, streamLength)
fs.Close()
return image
}
//另外,在ASP.NET中通过FileUpload控件得到的图像文件可以通过以下方法
public byte[] SetImageToByteArray(FileUpload FileUpload1)
{
Stream stream = FileUpload1.PostedFile.InputStream
byte[] photo = new byte[FileUpload1.PostedFile.ContentLength]
stream.Read(photo, 0, FileUpload1.PostedFile.ContentLength)
stream.Close()
return photo
}
2.从SQL Server数据库读取Image类型的数据,并转换成bytes[]或Image图像文件
//要使用SqlDataReader要加载using System.Data.SqlClient命名空间
//将数据库中的Image类型转换成byte[]
public byte[] SetImage(SqlDataReader reader)
{
return (byte[])reader["Image"]//Image为数据库中存放Image类型字段
}
//将byte[]转换成Image图像类型
//加载以下命名空间using System.Drawing/using System.IO
using System.Data.SqlClient*/
public Image SetByteToImage(byte[] mybyte)
{
Image image
MemoryStream mymemorystream = new MemoryStream(mybyte,0, mybyte.Length)
image = Image.FromStream(mymemorystream)
return image
}
'字符串转换成二进制function StrToBin(str)
dim curChr, curAsc, low, high
dim i
for i=1 To Len(str)
curChr = Mid(str, i, 1)
curAsc = Asc(curChr)
'asc对中文字符求出来的值可能为负数,
'加上65536就可求出它的无符号数值
'-1在机器内是用补码表示的0xffff,
'其无符号值为65535,65535=-1+65536
'其他负数依次类推。
if curAsc <0 then
curAsc = curAsc + 65535
end if
'对中文的处理:把双字节低位和高位分开
if curAsc >255 then
low = Left(Hex(Asc(curChr)), 2)
high = Right(Hex(Asc(curChr)), 2)
StrToBin = StrToBin &ChrB("&H" &low) &ChrB("&H" &high)
else
StrToBin = StrToBin &ChrB(AscB(CurChr))
end If
next
end function
'二进制转换成字符串
function BinToStr(binStr)
if IsNull(binStr) then
BinToStr = ""
exit function
end if
dim newStr, chnFlag
dim i, c
newStr = ""
chnFlag = true
for i=1 To LenB(binStr)
if chnFlag then
c = MidB(BinStr, i, 1)
if AscB(c) >127 then
'AscW 会把二进制的中文双字节字符高位和低位反转
'所以 MidB(binStr,i+1,1)&c 表达式中,c 在后面
newStr = newStr &Chr(AscW(MidB(binStr,i+1,1)&c))
chnFlag = false
else
newStr = newStr &Chr(AscB(c)) '这里用的是 ASCB 不是 ASCW
end If
else
chnFlag = true
end If
next
BinToStr = newStr
end function
rs.addnew
rs("items")= StrToBin(code)
rs.update
如果出错。.请确定items字段是否二进制类型
你可以做一个显示图片的文件,比如:img.aspx,可以接受一个ID用于读取图片二进制,并显示。此时显示文件时可以这样:<img
src=\"img.aspx?ID=1000\"
/>
把这段代码放在datalist时,把1000换成绑定数据就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)