【问题标题】:How to Store and Retrieve a varbinary(max) Column in SQL Server如何在 SQL Server 中存储和检索 varbinary(max) 列
【发布时间】:2014-07-29 00:22:19
【问题描述】:

我正在开发一个应用程序,我想在其中将用户的指纹存储到数据库中,然后将其与从设备中获取的指纹进行比较。 在将varbinary(max) 列转换回字节[] 时,我遇到了某些问题。我曾尝试使用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(max) 列然后检索它?

【问题讨论】:

  • 是的,但它为所有用户插入相同的值:?

标签: c# arrays sql-server varbinarymax


【解决方案1】:

您应该始终使用参数。试一试:

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[];
    }
}

【讨论】:

  • 插入后如何找回?
  • 非常感谢你认真解决了我的问题 :) 我这样做了大约 4 天,我认为存在某种 sdk 问题
  • @Nosheen 很高兴我能帮上忙 :)
【解决方案2】:

如果你有这些文件格式的指纹,那么你可以使用下面的代码,将pdf转换为字节,然后再将字节转换为pdf

  string filepath = Server.MapPath("~/pdf/" + file.FileName);
  byte[] bytes = System.IO.File.ReadAllBytes(filepath);

并将其传递给 varbinary 的数据库字段 现在要将此内容检索到 pdf 中,您可以使用

 byte[] pdfcontent =  (byte[])DS.Tables[0].Rows[0]["PDFContent"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    相关资源
    最近更新 更多