ByteArray的ByteArray作为SQL参数

时间:2015-08-12 09:22:20

标签: c# sql sql-server bytearray

我想删除与正在解析的数组的byte[]匹配的内容:

byte[][] data

我知道如何处理一个简单的byte[],它是一个与byte[]数组不同的故事。

  • 如何添加此类参数(在我的示例中仅byte[],而不是byte[][]
  • 如何在我的SQL位中使用此参数,例如

    .... 
    WHERE d IN @data ?   
    ....
    

代码:

public static void MyFunction(Transaction aTran, long Id, byte[][] data)
{
        string cmdText = ExtendedSQL.SQLQuery;

        using (SqlCommand cmd = new SqlCommand(cmdText))
        {
            cmd.Parameters.Add("@data", SqlDbType.VarBinary, data.Length).Value = data
            cmd.Parameters.AddWithValue("@id", Id);
            cmd.CommandType = CommandType.Text;
            cmd.ExecuteNonQuery();
        }
    }

1 个答案:

答案 0 :(得分:1)

您可以将byte[][]作为SqlDbType.VarBinary存储在数据库中,但似乎只存储byte[]

您希望删除db中与您拥有的多个byte[]匹配的所有数据。

由于它以二进制形式存储,您可能需要循环data[][]以执行多个查询。

    public static void MyHigherLevelFunction(Transaction aTran, long Id, byte[][] data)
    {
        foreach(byte[] oneData in data)
        {
            MyFunction(aTran, Id, oneData);
        }
    }

    public static void MyFunction(Transaction aTran, long Id, byte[] data)
    {
        string cmdText = ExtendedSQL.SQLQuery;

        using (SqlCommand cmd = new SqlCommand(cmdText))
        {
            cmd.Parameters.Add("@data", SqlDbType.VarBinary, data.Length).Value = data
            cmd.Parameters.AddWithValue("@id", Id);
            cmd.CommandType = CommandType.Text;
            cmd.ExecuteNonQuery();
        }
    }

SQL看起来像:

    .... 
    WHERE d = @data  
    ....