急急急!请教一下各位怎么读取sqlserver image类型,谢谢

xuqunying0545 2009-07-07 10:41:23

MemoryStream ms = new MemoryStream();
Image image = null;
ms = new MemoryStream((byte[])reader["C_LOGO"]);
image = Image.FromStream(ms); //客户LOGO图片--->老是提示参数无效
panel_logo.BackgroundImage = image;
...全文
803 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdgphc 2009-07-07
  • 打赏
  • 举报
回复
        private void button1_Click(object sender, EventArgs e)
{
Stream ms;
byte[] picbyte;
OpenFileDialog ofdSelectPic = new OpenFileDialog();
ofdSelectPic.ShowDialog();
string f = ofdSelectPic.FileName;

ms = ofdSelectPic.OpenFile();
picbyte = new byte[ms.Length];
ms.Position = 0;
ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));

SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=s");
conn.Open();
string sqlstring = "insert into ttt(image) values(@img)";
SqlCommand cmd = new SqlCommand(sqlstring, conn);
cmd.Parameters.Add("@img", SqlDbType.Image, picbyte.Length).Value = picbyte;

cmd.ExecuteNonQuery();
conn.Close();
}

private void button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=s");
conn.Open();
string strSql = "select image from ttt ";
SqlCommand cmd = new SqlCommand(strSql, conn);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
MemoryStream ms = new MemoryStream((byte[])sdr[0]);
Image image = Image.FromStream(ms);
sdr.Close();
conn.Close();
pictureBox1.Image = image;
}



按钮1插入,按钮2提取,我这段代码在CSDN上已经挣了N多分了,你参考一下。
zgke 2009-07-07
  • 打赏
  • 举报
回复
你的数据在保存到数据库的时候就已经是怀的了...
贴你的插入代码把.
北京的雾霾天 2009-07-07
  • 打赏
  • 举报
回复
使用ImageConverter来转一下试试。
yulitian 2009-07-07
  • 打赏
  • 举报
回复
不是读取的问题
是插入的问题

插入的时候也用MemoryStream 的吧!
用GetBuffer()方法来来得到图片的byte[]形式插入数据库
读取就没问题了
Jackienan 2009-07-07
  • 打赏
  • 举报
回复
SqlCommand cmd = new SqlCommand(sqlstring, conn);
SqlParameter parm = new SqlParameter("@img",SqlDbType.Image,picbyte.Length);
parm.value=picbyte;
cmd.Parameters.Add(parm);
cmd.ExecuteNonQuery();
这样就是正确的,我测试过
zgke 2009-07-07
  • 打赏
  • 举报
回复
另外看你代码 U_C_LOGO 才是你存放的东西 C_LOGO的哪个byte不知道你那取的.
zgke 2009-07-07
  • 打赏
  • 举报
回复
new SqlParameter("U_C_LOGO",SqlDbType.Image,16), 这样看....

不行跟到 ExecuteProc里看看 到底执行了什么...
pic_C_Logo.Image = Image.FromFile(ofdSelectPic.FileName); //显示图片
FileStream fs = new FileStream(ofdSelectPic.FileName, FileMode.OpenOrCreate, FileAccess.Read);
c_picbyte = new byte[fs.Length];
fs.Read(c_picbyte, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
这样读图是没问题的.
mugenmn 2009-07-07
  • 打赏
  • 举报
回复
他的数据库中图片存放的是Image 类型 不是byte类型的
yuanhuiqiao 2009-07-07
  • 打赏
  • 举报
回复
byte【】
yulitian 2009-07-07
  • 打赏
  • 举报
回复
pic_C_Logo.Image = Image.FromFile(ofdSelectPic.FileName); //显示图片
FileStream fs = new FileStream(ofdSelectPic.FileName, FileMode.OpenOrCreate, FileAccess.Read);
c_picbyte = new byte[fs.Length];
fs.Read(c_picbyte, 0, System.Convert.ToInt32(fs.Length));

这里错了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

假设有一个流,内存流或文件流均可叫做ms
你的目标图片是img,这是一个bitmap

img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte [] 你的目标数组= ms.GetBuffer();

不要用read方法读流就对了
xuqunying0545 2009-07-07
  • 打赏
  • 举报
回复
好像跟上面的4 楼差不多呀,可是不知道为什么就是提示报参数无效
image = Image.FromStream(ms);
xuqunying0545 2009-07-07
  • 打赏
  • 举报
回复
取出:
string sql = string.Format(@"select * from {0}.T_CO_COMPANY where sys_type = '{1}'", Common.DBUserName,Common.SystemType);
SqlDataReader reader = DAO.GetDAO().GetDataReader(sql);
if (!reader.Read())
{
reader.Close();
return;
}
MemoryStream ms=new MemoryStream();
Image image = null;
byte[] by = new byte[0];
if (reader["C_LOGO"].ToString() != "") //&& (reader["C_LOGO"].ToString() != "System.Byte[]")
{
ms = new MemoryStream((byte[])reader["C_LOGO"]);

if (ms.Capacity > 0)
{
image = Image.FromStream(ms);

panel_logo.BackgroundImage = image;

}
}
xuqunying0545 2009-07-07
  • 打赏
  • 举报
回复
我的代码是这样子的:
存入:
byte[] c_picbyte = new byte[0];
private void btn_c_openfile_Click(object sender, EventArgs e)
{
if (ofdSelectPic.ShowDialog() == DialogResult.OK)
{
if ((ofdSelectPic.OpenFile()) != null)
{
if (this.pic_C_Logo.Image != null)
{
this.pic_C_Logo.Image.Dispose();
this.pic_C_Logo.Image = null;
}
pic_C_Logo.Image = Image.FromFile(ofdSelectPic.FileName); //显示图片
FileStream fs = new FileStream(ofdSelectPic.FileName, FileMode.OpenOrCreate, FileAccess.Read);
c_picbyte = new byte[fs.Length];
fs.Read(c_picbyte, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
//c_ms.Close();
}
}

}


private void SaveDB()
{
SqlParameter[] parameters =
{
new SqlParameter("U_C_COMPANYNAME",SqlDbType.VarChar,255),
new SqlParameter("U_C_LOGO",SqlDbType.Image,c_picbyte.Length),
new SqlParameter("U_C_ADDRESS",SqlDbType.VarChar,255),
new SqlParameter("U_C_TELEPHONE",SqlDbType.VarChar,255),
new SqlParameter("U_C_LINKER",SqlDbType.VarChar,255),
new SqlParameter("U_COMPANYNAME",SqlDbType.VarChar,255),
new SqlParameter("U_LOGO",SqlDbType.Image,picbyte.Length),
new SqlParameter("U_ADDRESS",SqlDbType.VarChar,255),
new SqlParameter("U_TELEPHONE",SqlDbType.VarChar,255),
new SqlParameter("U_LINKER",SqlDbType.VarChar,255),
new SqlParameter("U_SOFTNAME",SqlDbType.VarChar,255),
new SqlParameter("U_INITPASSWORD",SqlDbType.VarChar,255),

new SqlParameter("U_A_DOMAINNAME",SqlDbType.VarChar,255),
new SqlParameter("U_A_SERVERNAME",SqlDbType.VarChar,255),
new SqlParameter("U_A_USERNAME",SqlDbType.VarChar,255),
new SqlParameter("U_A_PASSWORD",SqlDbType.VarChar,255),
new SqlParameter("U_A_FILEDIRECTORY",SqlDbType.VarChar,255),
new SqlParameter("U_SYS_TYPE",SqlDbType.VarChar,10),
};
MES.BusBll.Public.MES_Encrpytion Encrpytion = new MES.BusBll.Public.MES_Encrpytion(MES.BusBll.Public.EncrypType.COMPANY);
//Encrpytion.Encrypto(this.textBox1.Text); //加密
parameters[0].Value = Encrpytion.Encrypto(txt_c_company.Text);
parameters[1].Value = c_picbyte;
parameters[2].Value = Encrpytion.Encrypto(txt_c_address.Text);
parameters[3].Value = Encrpytion.Encrypto(txt_c_tel.Text);
parameters[4].Value = Encrpytion.Encrypto(txt_c_linker.Text);
parameters[5].Value = Encrpytion.Encrypto(txt_company.Text);
parameters[6].Value = picbyte;
parameters[7].Value = Encrpytion.Encrypto(txtaddress.Text);
parameters[8].Value = Encrpytion.Encrypto(txt_tel.Text);
parameters[9].Value = Encrpytion.Encrypto(txt_linker.Text);
parameters[10].Value = Encrpytion.Encrypto(txtSOFTNAME.Text);
parameters[11].Value = Encrpytion.Encrypto(utxtpsw.Text);

parameters[12].Value = ""; //Encrpytion.Encrypto(txtdomain.Text);
parameters[13].Value = ""; //Encrpytion.Encrypto(txtservername.Text);
parameters[14].Value = ""; //Encrpytion.Encrypto(txtuser.Text);
parameters[15].Value = ""; //Encrpytion.Encrypto(txtuserpwd.Text);
parameters[16].Value = ""; //Encrpytion.Encrypto(txtcatalog.Text);
parameters[17].Value = Common.SystemType;
DAO.GetDAO().ExecuteProc("P_T_CO_COMPANY_UPDATE", parameters);
}

110,566

社区成员

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

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

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