A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马李蒙 中级黑马   /  2013-4-16 21:26  /  1376 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

SqlParameter("@Photo",DBNull.Value)存储到数据库Image提示nvarchar与image数据类型不匹配??
Employee()为Model,即Photo为表Employee中的一个字段
byte[] photo{get;set;}
Employee emp=new Employee();
if(photo==null)
{
return DBNull.Value;
}
else
{
return photo;
}
emp.Photo=photo;
ExecuteNonQuery("insert into Employee(Photo) values(@Photo)",new SqlParameter("@Photo",emp.Photo));
当执行插入语句,emp.Photo的值为DBNull.Value时提示:操作数类型冲突: nvarchar 与 image 不兼容;
emp.Photo的值不为空时,成功,求解?????????
数据库中Photo所对应字段为Image类型,C#中定义photo为byte[];

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

2 个回复

倒序浏览
1。 将数据库中的Image类型转换成byte[]类型
      public byte[] SetImage(SqlDataReader reader)
     {
          return (byte[])reader["Image"];//Image为数据库中存放Image类型字段
     }
2。 将byte[]转换成Image图像类型;
//加载以下命名空间using System.Drawing;/using System.IO;
using System.Data.SqlClient;*/
public Image Byte_Image(byte[] byte)
{
       Image image;
       MemoryStream memorystream = new MemoryStream(byte,0, byte.Length);
       image = Image.FromStream(memorystream);
       return image;
}
回复 使用道具 举报
private void button1_Click(object sender, RoutedEventArgs e)
        {
            System.IO.FileStream fs = new System.IO.FileStream(@"C:\Users\fei\Pictures\IMG_20120621_212522.jpg",System.IO.FileMode.Open,System.IO.FileAccess.Read);
            byte[] str = new byte[fs.Length];
            fs.Read(str, 0, str.Length);
            fs.Close();
            InsertImage(str);
        }
        private void InsertImage(byte[] str)
        {
            string constr = ConfigurationManager.ConnectionStrings["connstr"].ToString();
            using (SqlConnection conn = new SqlConnection(constr))
            {
                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText="insert into ImageTable(photo) values(@ImageValue)";
                SqlParameter par = new SqlParameter("@ImageValue", System.Data.SqlDbType.Image);
                par.Value = str;
                cmd.Parameters.Add(par);
                if (cmd.ExecuteNonQuery() > 0)
                {
                    MessageBox.Show("插入成功!");
                }
            }
        }
可以用这个代码试一下,我自己写的试了一下是可以的。



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马