在sql server 2014数据库中保存指纹图像

时间:2016-10-04 08:37:26

标签: c#

我正在开发指纹系统。我想将指纹图像和其他数据(如名字和姓氏)提交给数据库,但它会继续显示此异常: No mapping exists from object type System.Drawing.Bitmap to a known managed provider native type.

这是我的最后一段代码:

public void btnSave_Click(object sender, EventArgs e)
   {
     @fname = txtfname.Text;
     @lname = txtlname.Text;
     byte[] @img1 = Encoding.UTF8.GetBytes(Convert.ToString(pictureBox1.Image));    
     con = new SqlConnection(@"Data Source=DESKTOP-400N4CL;Initial Catalog=test;Integrated Security=True");
     con.Open();
     cmd = new SqlCommand("INSERT INTO dbo.fingerp " + " (fname,lname,finprint) " + " VALUES(@fname,@lname,@img1)", con);
     cmd.Parameters.AddWithValue("@fname", txtfname.Text);
     cmd.Parameters.AddWithValue("@lname", txtlname.Text);
     cmd.Parameters.AddWithValue("@img1", pictureBox1.Image);
     cmd.ExecuteNonQuery();
   }

我也使用过这种方法:

public static byte[] ImageToByte2(Image bmp)
  {
     byte[] img1 = new byte[0];
     using (MemoryStream stream = new MemoryStream())
      {
       bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
       stream.Close();
       img1 = stream.ToArray();
      }
     return img1;
  }

有同样的错误。 任何协助请。

2 个答案:

答案 0 :(得分:0)

您正在尝试将PictureBox(类型为System.Drawing.Bitmap)的内容保存到需要二进制数据的数据库字段中。

问题就在这一行:

cmd.Parameters.AddWithValue("@img1", pictureBox1.Image);

它应该是

cmd.Parameters.AddWithValue("@img1", @img1);

是包含图像数据的字节数组。

我还假设您的finprint列属于BINARYVARBINARY类型。

答案 1 :(得分:0)

SQL Server需要一个文件流,而ImageToByte2()方法实现中的逻辑是错误的。

此外,您正在尝试将位图传递给数据库,这将无法正常工作。

试试这个:

public void btnSave_Click(object sender, EventArgs e)
{
@fname = txtfname.Text;
@lname = txtlname.Text;
byte[] @img1 = ImageToByte2(pictureBox1.Image);
con = new SqlConnection(@"Data Source=DESKTOP-400N4CL;Initial Catalog=test;Integrated Security=True");
con.Open();
cmd = new SqlCommand("INSERT INTO dbo.fingerp " + " (fname,lname,finprint) " + " VALUES(@fname,@lname,@img1)", con);
cmd.Parameters.AddWithValue("@fname", txtfname.Text);
cmd.Parameters.AddWithValue("@lname", txtlname.Text);
cmd.Parameters.AddWithValue("@img1", @img1);
cmd.ExecuteNonQuery();
}


public static byte[] ImageToByte2(Bitmap img)
{
using (var stream = new MemoryStream())
{
img.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
return stream.ToArray();
}
}