C#从数据库读取图片

liutong123 2009-10-23 10:57:20
存取图片的问题,把图片从文件类型变成byte[]类型存储到字段类型为image的数据库中,然后从数据库中读取出来,显示在图片框中,但是Bitmap bmp = new Bitmap(ms);这句话总是提示“参数无效”,不知道是什么原因?网上的大部分代码我都看过了,都不行,我的是Winform
...全文
882 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmc_eric 2009-12-22
  • 打赏
  • 举报
回复
同意14楼的啊!我顶他啊!他
lin763778613 2009-12-22
  • 打赏
  • 举报
回复
上面是从数据库里查询出来的,
这是保存到数据库的
if (openFileDialog1.FileName.ToString(). != "")
{
FileStream fs = new FileStream(openFileDialog1.FileName.ToString().Trim(), FileMode.Open, FileAccess.Read);
ib = new byte[fs.Length];
fs.Read(ib, 0, (int)fs.Length);
}
else { ib = new byte[0]; }

cmd.Parameters.Add("@ZhaoPianXinXi", SqlDbType.Image);
cmd.Parameters["@ZhaoPianXinXi"].Value = ZhaoPianXinXi;
lin763778613 2009-12-22
  • 打赏
  • 举报
回复
/// 功能:根据员工代码得到员工照片
/// </summary>
/// <param name="YuanGongDaiMa">员工代码</param>
/// <returns></returns>
public MemoryStream Select_TuPian(int YuanGongDaiMa)
{
try
{
//MemoryStream ii = new MemoryStream();
using (SqlConnection con = Con.GetConnect())
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "Select_YuanGongZhaoPian";
cmd.CommandTimeout = 0;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
cmd.Parameters.Add("@YuanGongDaiMa", SqlDbType.Int);
cmd.Parameters["@YuanGongDaiMa"].Value = YuanGongDaiMa;
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
buf = new MemoryStream((byte[])reader["ZhaoPianXinXi"]);
}

}
return buf;
}
catch
{
return null;
}

}


MemoryStream kk = YGXX.Select_TuPian(YuanGongDaiMa);
if (kk!=null)
{
if (kk.Length>5)
{
Image Pictrue = Image.FromStream(kk, true);
pictureBox1.Image = Pictrue;
}
}
l13864860169 2009-10-24
  • 打赏
  • 举报
回复
读数据流
zhangchuccc 2009-10-24
  • 打赏
  • 举报
回复
http://lvzhh.spaces.live.com/Blog/cns!A3FF5E9BC63098A6!787.entry
这是偶们老师的博客,他写的一篇文章,图片从数据库里读取的,
已经试验过,可以读取,
可以去看看
边城的刀声 2009-10-24
  • 打赏
  • 举报
回复
学习
Flyingdragon168 2009-10-24
  • 打赏
  • 举报
回复
C#的代码暂时没有,VB的代码有,跟你贴VB的参考一下吧:
'保存图片到数据库中(利用数据流)
Public Sub SaveImageToDB(ByRef fld As ADODB.Field, file As String)
Dim c As New ADODB.Stream

On Error GoTo ErrSave
'如果文件不存在,则不用保存
If FileExists(file) = False Then Exit Sub
'利用数据流保存到数据库中
c.Mode = adModeReadWrite
c.Type = adTypeBinary
c.Open
c.LoadFromFile file
fld.Value = c.Read()
c.Close
Exit Sub
ErrSave:
If Err.Number <> 0 Then
MsgBox Err.Number & ";" & Err.Description, vbInformation + vbOKOnly, "存储图片"
End If
End Sub

Public Sub LoadImageFromDB(ByVal fld As ADODB.Field, objPic As Object)
Dim c As New ADODB.Stream
Dim strFile As String

On Error GoTo errLoad
'如果图片内容为空
If IsNull(fld.Value) Then
objPic.Picture = LoadPicture("")
Exit Sub
End If
'开始从数据库中读取图片
c.Mode = adModeReadWrite
c.Type = adTypeBinary
c.Open
c.Write (fld.Value)
'生成临时文件路径
strFile = g_WinDir & "\Temp"
Call fCreateDir(strFile)
strFile = strFile & "\~" & GetString(False) & ".tmp"
If FileExists(strFile) Then Kill (strFile)
c.SaveToFile strFile, adSaveCreateOverWrite
objPic.Picture = LoadPicture(strFile)
'删除临时文件
Kill strFile
Exit Sub
errLoad:
If Err.Number = 481 Then
Set objPic.Picture = LoadPicture("")
Else
If Err.Number <> 0 Then
MsgBox Err.Number & ";" & Err.Description, vbInformation + vbOKOnly, "加载图片"
End If
End If
End Sub
willwayer23 2009-10-23
  • 打赏
  • 举报
回复
MemoryStream
yyz985 2009-10-23
  • 打赏
  • 举报
回复
把你的详细需求整理成文档,发任务包就可以了
liutong123 2009-10-23
  • 打赏
  • 举报
回复
在线等呢,高手来呀
liutong123 2009-10-23
  • 打赏
  • 举报
回复 1
望楼上的高手们,不要复制网上的代码呀,自己能够做成功的在贴出来吧
PandaIT 2009-10-23
  • 打赏
  • 举报
回复
byte[] imagebytes = null; 

//打开数据库

SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=;database=db_05");

con.Open();

SqlCommand com = new SqlCommand("select top 1* from tb_09", con);

SqlDataReader dr = com.ExecuteReader();

while (dr.Read())

{

imagebytes = (byte[])dr.GetValue(1);

}

dr.Close();

com.Clone();

con.Close();

MemoryStream ms = new MemoryStream(imagebytes);

Bitmap bmpt = new Bitmap(ms);

pictureBox1.Image = bmpt;
wuyq11 2009-10-23
  • 打赏
  • 举报
回复
保存到数据库里的 值不是保存的时候丢了 就是取的时候丢了.
反信息不是图形或则图形信息被破坏
(using SqlConnection conn=new SqlConnection(""))
{
string strSql="select photo from Tb";
SqlCommand cmd=new SqlCommand(strSql,conn);
conn.Open();
SqlDataReader reader=cmd.ExecuteReader();
if(reader.Read())
{
MemoryStream ms=new MemoryStream((byte[])reader["Photo"]);
Image image=Image.FromStream(ms,true);
picturebox1.Image=image;
}
reader.Close();
conn.Close();
}
http://topic.csdn.net/u/20090223/12/d67acacb-48f9-4cd0-9b0e-006704e81e92.html
liutong123 2009-10-23
  • 打赏
  • 举报
回复
楼上的不要理论,来点代码
PandaIT 2009-10-23
  • 打赏
  • 举报
回复
上面错了!

应该用SqlDataReader的GetBytes函数过滤头文件
PandaIT 2009-10-23
  • 打赏
  • 举报
回复
读取出来记得强转!

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧