如何将字节数组插入SQL表?

如何将字节数组插入SQL表?,sql,Sql,我尝试在sql表中插入字节数组,表中的数据类型为VarBinary(Max),但最终出现以下错误: System.Data.SqlClient.SqlException:不允许从数据类型varchar隐式转换为varbinary(max)。使用CONVERT函数运行此查询。 顺便说一句,我是Sql的初学者 这是我的密码: byte[] key; byte[] iv; void generateTDES() { TripleDESCryptoServiceP

我尝试在sql表中插入字节数组,表中的数据类型为VarBinary(Max),但最终出现以下错误:

System.Data.SqlClient.SqlException:不允许从数据类型varchar隐式转换为varbinary(max)。使用CONVERT函数运行此查询。

顺便说一句,我是Sql的初学者

这是我的密码:

   byte[] key;
   byte[] iv;

   void generateTDES()
   {
       TripleDESCryptoServiceProvider tdes;
       tdes = new TripleDESCryptoServiceProvider();
       tdes.KeySize = 128;
       key = tdes.Key;
       iv = tdes.IV;
   }


    public void WriteUser(string _GUID, string _Name, string _Pass)
    {
        generateTDES();
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        sql = "Insert into MembersTable (GUID,Name,Pass,CryptKey)"
        + "VALUES('" + _GUID + "','" + _Name + "','" + _Pass + "','" +key + "');";
        SqlCommand cmdIns = new SqlCommand(sql, conn);
        cmdIns.ExecuteNonQuery();
        conn.Close();
    }

从二进制值准备一个十六进制字符串,并在连接查询中使用它。十六进制字符串看起来像0x123456789ABCDEF

您的最终代码如下:

检查从二进制构造十六进制的代码


对不起,我说VB…:)

通过如下参数化查询,您可以更好地控制类型,保护自己免受注入攻击,并享受更好的性能:

    sql = "Insert into MembersTable (GUID,Name,Pass,CryptKey)"
    + "VALUES(@guid, @name, @pass, @key);";

    SqlCommand cmdIns = new SqlCommand(sql, conn);

    SqlParameter _guidParam = new SqlParameter("@guid", DbType.UniqueIdentifier);
    _guidParam.Value = _GUID;

    cmdIns.Parameters.Add(_guidParam);

    // Repeat for other parameters, specifying the appropriate types

    cmdIns.ExecuteNonQuery();

真的!但是有一种类型可以处理varbinary吗?构造函数上还有一个重载,您可以在其中指定字段长度;例如,新的SqlParameter(“@name”,DbType.NVarChar,128);您想要的varbinary类型是“DbType.varbinary”,这是非常恰当的。为了支持8000多个字节,您必须像我上面所做的那样显式指定类型。
For Each bytTemp As Byte In bytAllBytes
  'For your exact requirements
  strHex &= bytTemp.ToString("X2") & " "
  'however, you can use "X4" or "Xn" where replacing "n" with a numeric value will pad that number of zeros in the begining
Next
    sql = "Insert into MembersTable (GUID,Name,Pass,CryptKey)"
    + "VALUES(@guid, @name, @pass, @key);";

    SqlCommand cmdIns = new SqlCommand(sql, conn);

    SqlParameter _guidParam = new SqlParameter("@guid", DbType.UniqueIdentifier);
    _guidParam.Value = _GUID;

    cmdIns.Parameters.Add(_guidParam);

    // Repeat for other parameters, specifying the appropriate types

    cmdIns.ExecuteNonQuery();