在sql server 2014数据库中保存指纹图像
我正在开发指纹系统。我要提交的指纹图像以及诸如名字和姓氏数据库中的其它数据,但它继续显示此异常: No mapping exists from object type System.Drawing.Bitmap to a known managed provider native type.
在sql server 2014数据库中保存指纹图像
这里是我最后的代码:
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;
}
与相同的错误。 任何援助请。
您正在尝试将PictureBox
(其类型为System.Drawing.Bitmap
)的内容保存到需要二进制数据的数据库字段中。
所以,问题是这一行:
cmd.Parameters.AddWithValue("@img1", pictureBox1.Image);
它应该是
cmd.Parameters.AddWithValue("@img1", @img1);
这是一个包含图像数据的字节数组。
我还假设您的finprint
列是BINARY
或VARBINARY
类型。
SQL服务器期望文件流和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();
}
}
感谢您的及时回复。行字节[] @ img1 = ImageToByte2(pictureBox1.Image);显示错误下划线imageToByte2名称'ImageToByte2'在当前上下文中不存在如何更正请 – Innoujata
我刚刚编辑了代码。在我的代码中放置了一个括号。请立即尝试 –
请注意,数据库类型“图像”是不是一个位图图像本身,它是一个字节序列,基本上在这方面一个字节数组。 –
另请注意,如果数据库中的数据类型实际上是“IMAGE”,则应该使用“VARBINARY(MAX)”(可能)。 –