我正在开发一个应用程序,我希望将用户指纹存储到数据库中,然后将其与从设备中获取的指纹进行比较。 将varbinary(max)列转换回byte []时遇到了一些问题。我试图使用GetSqlBinary函数,但它给了我indexoutofrangeException。
我使用以下代码将模板存储到数据库中,但发现所有用户的值相同,例如0x000000处
public int insernewVoter(NSubject thumb)
{
connectionOpen();
byteArray = thumb.GetTemplateBuffer().ToArray();
int insert = 0;
cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO VOTER (THUMB) VALUES(CONVERT(varbinary(max),'" + byteArray + "'))";
int rowsupdated = cmd.ExecuteNonQuery();
if (rowsupdated <= 0) {
MessageBox.Show("Ho Gya");
}
else {
MessageBox.Show("AP MAR KYN NAI JATA :D");
}
return 0;
connectionClose();
}
任何人都可以取悦我,我怎么能首先将byte []插入varbinary类型的列中并检索它。
答案 0 :(得分:9)
你应该总是使用参数。试一试:
using(var conn = new SqlConnection("YOUR CONNECTION STRING ..."))
using (var cmd = new SqlCommand("INSERT INTO VOTER (THUMB) VALUES(@THUMB)", conn)) {
conn.Open();
var param = new SqlParameter("@THUMB", SqlDbType.Binary) {
// here goes your binary data (make sure it's correct)
Value = thumb.GetTemplateBuffer().ToArray()
};
cmd.Parameters.Add(param);
int rowsAffected = cmd.ExecuteNonQuery();
// do your other magic ...
}
修改强>
既然你已经问过如何检索它,你可以做一些事情(不确定你的确切要求,但它应该给你这个想法):
private byte[] GetThumbData(int userId) {
using (var conn = new SqlConnection("YOUR CONNECTION STRING ..."))
using (var cmd = new SqlCommand("SELECT THUMB FROM VOTER WHERE ID = @ID", conn)) {
conn.Open();
cmd.Parameters.AddWithValue("@ID", userId);
return cmd.ExecuteScalar() as byte[];
}
}
答案 1 :(得分:1)
如果您有文件格式的指纹,您可以使用以下代码,将pdf转换为字节和字节再次转换为pdf
string filepath = Server.MapPath("~/pdf/" + file.FileName);
byte[] bytes = System.IO.File.ReadAllBytes(filepath);
并将其传递给varbinary的Database字段 现在要将这个内容翻译成pdf你可以使用
byte[] pdfcontent = (byte[])DS.Tables[0].Rows[0]["PDFContent"];