取System.Byte[](图片二进制)里二进制值的问题

zk911 2016-08-18 03:48:54
代码如下:

byte[] photo_byte = null;
using (FileStream fs = new FileStream(Photo, FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs))
{
photo_byte = br.ReadBytes((int)fs.Length);
}
}
strSql.Append("'" + photo_byte + "'");



photo的值是存放图片的路径,现在需要把路径转换成二进制值 直接保存到数据库中,但是追踪执行完sql语句后 变量photo_byte 得到的值是System.Byte[] ,数据库提示“”不允许从数据类型varchar到varbinary(max)的隐式转换” 其中photo的SQL数据类型是“varbinary(MAX)” 。请问各路大神 如何能把 photo_byte 的二进制值提取出来直接存入数据库》?

以下是追踪的sql添加语句:INSERT INTO Material
(MaterialGuid, UpperLimit, LowerLimit, IConsultPrice, EConsultPrice, CalculateMethod, Remark, MaterialId, MaterialName, ClassId, Spec, Unit, BarNo, Place, Encapsulation, Photo)
VALUES ('513a960a-cda8-402a-b46d-f6f6202ede57', 0, 0, 0, 0, '', '', '2', '2', '0000', '', '个', '', '', '', 'System.Byte[]')
...全文
509 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
我叫小菜菜 2016-08-19
  • 打赏
  • 举报
回复
引用 4 楼 zk911 的回复:
数据库存图片用什么方式做好一些? 求指教!
小图用base64,比如头像之类的。 大图用文件服务器+磁盘。
redshiliu 2016-08-19
  • 打赏
  • 举报
回复
二进制数据是不能通过组装sql语句的方式插入或更新,只能通过参数的方式来实现,如果你实在想用sql语句的方式考虑吧byte[]转化成base64字符串。[/b]
  • 打赏
  • 举报
回复
你应该学习一下如何给 Binary 类型的数据库表字段赋值。 胡乱写 "'" + photo_byte + "'",这样乱抄别无厘头的带码好吗?
xuzuning 2016-08-19
  • 打赏
  • 举报
回复
zk911 2016-08-19
  • 打赏
  • 举报
回复
谢谢楼上的朋友 请问或者通过什么方法能把System.Byte[]里面的值提取出来 然后写进sql就可以了。 我想在上面的C# code里把图片以二进制流方法加进去,不修改底层代码,如何能实现呢?
zk911 2016-08-18
  • 打赏
  • 举报
回复
请提供些相关代码吧 ,小弟不胜感激。
zk911 2016-08-18
  • 打赏
  • 举报
回复
//添加图片 if (PhotoFilePath == "") { PhotoFilePath = Application.StartupPath + @"\defaultImage\no_image_available_large.gif"; ; } material.Photo = PhotoFilePath; 这是前台添加代码,material.Photo就存了一条图片路径,当点击添加按钮后 只需通过调用类把一条SQL语句将图片转换成二进制流然后添加到SQL数据库里 前台可以添加修改就ok了。
  • 打赏
  • 举报
回复
那你这块就单独用原生sql,然后用DbParameter写,不要用你们那个Factory就可以了,其它地方不改
zk911 2016-08-18
  • 打赏
  • 举报
回复
或者有什么方法 能把System.Byte[]'里面的值提取出来直接通过inset info添加到数据库呢 程序是cs架构的 而且图片不是很多 之前写好了现在又要往里加图片 想在原有的基础上 直接把图片加进去 然后再做个修改 就可以了
  • 打赏
  • 举报
回复
看你们的CommonFactory是否支持参数化呗…… 否则底层必须修改
zk911 2016-08-18
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
byte[]必须参数化的方式执行请求,即@xxxx的方式
程序写成这样了 如何用@xxxx的方式添加图片呢,不会整个添加类需要重写吧
zk911 2016-08-18
  • 打赏
  • 举报
回复
数据库存图片用什么方式做好一些? 求指教!
  • 打赏
  • 举报
回复
拼sql这种写法还是早日抛弃为妙,不然Sql注入搞死你,而简单的判断是否存在sql注入问题的方式,就是在输入框中输入一个单引号,如果程序报错了,那么90%的概率,这个程序可以被sql注入
  • 打赏
  • 举报
回复
byte[]必须参数化的方式执行请求,即@xxxx的方式
zk911 2016-08-18
  • 打赏
  • 举报
回复


		/// <summary>
		/// 增加一条数据
		/// </summary>
		public bool Add()
		{
			StringBuilder strSql=new StringBuilder();
			strSql.Append("insert into [Material](");
            strSql.Append("MaterialGuid,UpperLimit,LowerLimit,IConsultPrice,EConsultPrice,CalculateMethod,Remark,MaterialId,MaterialName,ClassId,Spec,Unit,BarNo,Place,Encapsulation,Photo");
			strSql.Append(")");
			strSql.Append(" values (");
			strSql.Append("'"+MaterialGuid+"',");
			strSql.Append(""+UpperLimit+",");
			strSql.Append(""+LowerLimit+",");
			strSql.Append(""+IConsultPrice+",");
			strSql.Append(""+EConsultPrice+",");
			strSql.Append("'"+CalculateMethod+"',");
			strSql.Append("'"+Remark+"',");
			strSql.Append("'"+MaterialId+"',");
			strSql.Append("'"+MaterialName+"',");
			strSql.Append("'"+ClassId+"',");
			strSql.Append("'"+Spec+"',");
			strSql.Append("'"+Unit+"',");
			strSql.Append("'"+BarNo+"',");
			strSql.Append("'"+Place+"',");
            strSql.Append("'"+Encapsulation + "',");

            byte[] photo_byte = null;   //数据库存图片
            using (FileStream fs = new FileStream(Photo, FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    photo_byte = br.ReadBytes((int)fs.Length);
                }
            }
            strSql.Append("'" + photo_byte + "'");


			strSql.Append(")");
			CommonInterface pComm = CommonFactory.CreateInstance(CommonData.sql);

            try
            {
                pComm.Execute(strSql.ToString());   //执行Sql语句无返回值
                pComm.Close();
                return true;
            }
            catch (System.Exception e)
            {
                pComm.Close();
                throw e;
            }		
		}

以上是数据库添加类代码

111,094

社区成员

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

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

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