黑马程序员技术交流社区

标题: 数据空值制问题 [打印本页]

作者: 黑马李蒙    时间: 2013-4-16 21:26
标题: 数据空值制问题
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[];

作者: 许庭洲    时间: 2013-4-17 06:23
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;
}
作者: 史鹏飞    时间: 2013-4-17 13:14
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("插入成功!");
                }
            }
        }
可以用这个代码试一下,我自己写的试了一下是可以的。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2