C#如何读出image类型字段的内容

liang4419 2017-02-14 04:28:34
表有字段ImageType,类型是image,表内容如图
现在想在程序读取出来,拼成 insert table1(ImageType) values( '0x89504E470D0A1A' )语句。
C#读取代码:
strV=String.Byte[]而不是0x8950......

如何才能处理成0x8950.....
...全文
849 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
玉墨言 2017-02-18
  • 打赏
  • 举报
回复
你的意思是你读到的是byte[],但是不造这么让 byte[]转string?
  • 打赏
  • 举报
回复

SELECT  CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), ImageType),1)  FROM MMItem 
8楼的应该也是对的,只是你用了SSMS,查询出来结果有长度限制拷贝出来的也有问题了 你可以试着转成XML,默认显示长度为2MB,可以在工具->选项->查询结果->以网格显示文本结果,进行设置。 SELECT CONVERT(XML,CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), ImageType),1)) FROM MMItem
liang4419 2017-02-15
  • 打赏
  • 举报
回复
题目要求表达很不清楚吗? 不用Base64;也不是直接显示成一张图片或保存成一张图片; 要求是拼成一个sql语句 insert table1(ImageType) values( '0x89504E470D0A1A' )
qq_36769535 2017-02-15
  • 打赏
  • 举报
回复
不好意思漏了一段

public byte[] ReadImageFile(String img)
    {
        FileInfo fileinfo = new FileInfo(img);
        byte[] buf = new byte[fileinfo.Length];
        FileStream fs = new FileStream(img, FileMode.Open, FileAccess.Read);
        fs.Read(buf, 0, buf.Length);
        fs.Close();
        GC.ReRegisterForFinalize(fileinfo);
        GC.ReRegisterForFinalize(fs);
        return buf;
    }
qq_36769535 2017-02-15
  • 打赏
  • 举报
回复
可能我理解的不对啊。 如果只是将图片或音视频插入数据库或读取,例子很多 百度“c# sql插入图片” 方法很多,如果要转为字符串的话,使用Base64String, 比如socket传输图片, //接收传过来的Base64String (图片的字符串) byte[] fac = Convert.FromBase64String(set_User[5]);//还原为byte[] //更新到数据库 SqlCommand com_user = new SqlCommand("UPDATE Trans_User SET ", FileU_Favicon=@pic" + " WHERE id='1'", Conn); com_user.Parameters.Add("@pic", SqlDbType.VarBinary).Value = fac; com_user.ExecuteNonQuery(); 客户端图片生成字符串 OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "选择图像文件"; ofd.Filter = "图像文件|*.png;*bmp;*.jpg"; ofd.RestoreDirectory = true; ofd.Multiselect = false; if (ofd.ShowDialog() == DialogResult.OK) { set_fac.Text = ofd.FileName; byte[] imagebytes = func.ReadImageFile(ofd.FileName); MsgList.user_info[5] = Convert.ToBase64String(imagebytes); } 其他的转换均不能还原,试了试只有Base64String能还原图像音视频。
liang4419 2017-02-15
  • 打赏
  • 举报
回复
自己顶一下。
liang4419 2017-02-14
  • 打赏
  • 举报
回复
引用 10 楼 hanjun0612 的回复:
[quote=引用 9 楼 liang4419 的回复:] [quote=引用 7 楼 hanjun0612 的回复:] 你读取imagetype时。尝试这么读取看看 select top 1 CONVERT (varchar(255), CONVERT (varbinary(255), imagetype)) from MMItem 然后在看看你在dt.Rows[0]["ImageType"].ToString() 是不是正确
乱码!![/quote] 那直接 select CAST(imagetype as varbinary(100)) from MMITEM 呢?[/quote] 这个类型varbinary与image类型是一样啊,都是Byte[]数组;
正怒月神 2017-02-14
  • 打赏
  • 举报
回复
引用 9 楼 liang4419 的回复:
[quote=引用 7 楼 hanjun0612 的回复:] 你读取imagetype时。尝试这么读取看看 select top 1 CONVERT (varchar(255), CONVERT (varbinary(255), imagetype)) from MMItem 然后在看看你在dt.Rows[0]["ImageType"].ToString() 是不是正确
乱码!![/quote] 那直接 select CAST(imagetype as varbinary(100)) from MMITEM 呢?
liang4419 2017-02-14
  • 打赏
  • 举报
回复
引用 7 楼 hanjun0612 的回复:
你读取imagetype时。尝试这么读取看看 select top 1 CONVERT (varchar(255), CONVERT (varbinary(255), imagetype)) from MMItem 然后在看看你在dt.Rows[0]["ImageType"].ToString() 是不是正确
乱码!!
liang4419 2017-02-14
  • 打赏
  • 举报
回复

public string ToHexString(byte[] bytes) // 0xae00cf => "AE00CF "
{
string hexString = string.Empty;
if (bytes != null)
{
StringBuilder strB = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
strB.Append(bytes[i].ToString("X2"));
}
hexString = strB.ToString();
}
return hexString;
}
得到图片值byte[] bys = (byte[])dt.Rows[0]["ImageType"]; 传入上面方法,返回结果与原来的值几乎一致。
只不过后面多出很多字符。

正怒月神 2017-02-14
  • 打赏
  • 举报
回复
你读取imagetype时。尝试这么读取看看 select top 1 CONVERT (varchar(255), CONVERT (varbinary(255), imagetype)) from MMItem 然后在看看你在dt.Rows[0]["ImageType"].ToString() 是不是正确
白衣如花 2017-02-14
  • 打赏
  • 举报
回复
http://www.cnblogs.com/Maxq/p/5953682.html 不知道这个是不是你要的效果。。。
liang4419 2017-02-14
  • 打赏
  • 举报
回复
引用 4 楼 hanjun0612 的回复:
你试试 byte[] strv=(byte[])dt.Rows[0]["ImageType"]; var ms = new System.IO.MemoryStream(strv); var bmp = new Bitmap(ms); ms.Dispose(); pictureBox1.Image = bmp;
如果是直接显示成图片,你的是对的!! 但是我想把它变成字符串,拼成sql插入语句。
正怒月神 2017-02-14
  • 打赏
  • 举报
回复
你试试 byte[] strv=(byte[])dt.Rows[0]["ImageType"]; var ms = new System.IO.MemoryStream(strv); var bmp = new Bitmap(ms); ms.Dispose(); pictureBox1.Image = bmp;
白衣如花 2017-02-14
  • 打赏
  • 举报
回复
引用 2 楼 liang4419 的回复:
[quote=引用 1 楼 u012948520 的回复:] var strv = dt.Rows[0]["ImageType"].Value.ToString()
怎么会有value??[/quote]我搞错了。。
liang4419 2017-02-14
  • 打赏
  • 举报
回复
引用 1 楼 u012948520 的回复:
var strv = dt.Rows[0]["ImageType"].Value.ToString()
怎么会有value??
白衣如花 2017-02-14
  • 打赏
  • 举报
回复
var strv = dt.Rows[0]["ImageType"].Value.ToString()

110,534

社区成员

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

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

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