【问题标题】:Insert binary data into SQL from c# without a stored procedure在没有存储过程的情况下从 c# 将二进制数据插入 SQL
【发布时间】:2010-12-29 16:24:51
【问题描述】:

有谁知道是否可以在不使用存储过程的情况下从 c# 将二进制数据插入到 SQL 字段中?

例如 - 将字节数组转换为 base64 或类似的东西,然后使用如下文本命令...

String.Format("update A set B = {0} where C = D", Convert.ToBase64String(b));

其中 b 是一个字节数组。

谢谢

【问题讨论】:

    标签: c# sql stored-procedures binary


    【解决方案1】:

    当然,你应该使用参数化语句,但如果你真的需要,你可以这样做:

    byte[] b = null; //(your input should be a byte[])
    String.Format("update A set B = 0x{0} where C = D", BitConverter.ToString(b).Replace("-", "").ToLower());
    

    SQL Server 需要十六进制格式的二进制数据,不带连字符,小写,前缀为“0x

    【讨论】:

    • 我收到以下错误:“该标识符以‘D312E360A25E2E3CFD30A312030206F626A203C3C2F46696C7465722F466C6174654465636F64652F4C656E677468203333363E3E73747265616D0A789C8551D’开始太长最大长度是128。\ r \ nIncorrect附近有语法D312E360A25E2E3CFD30A312030206F626A203C3C2F46696C7465722F466C6174654465636F64652F4C656E677468203333363E3E73747265616D0A789C8551D'” 跨度>
    • 抱歉无视。忘记用引号括起来了。。谢谢!
    • 你能告诉我如何将数据从数据表中取回字节数组吗?
    • 是的,使用SqlDataReader,它会以byte[]的形式返回二进制文件
    【解决方案2】:

    试试这个代码,无论是未注释的 command.Parameters 还是注释的代码都应该可以工作。我在工作中使用 OracleDataClient,所以这段代码几乎完全来自MSDN

    string commandText= "update A set B = @BIN where C = D";
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(commandText, connection);
        command.Parameters.Add("@BIN", SqlDbType.Binary, b.Length).Value = b;    
        // command.Parameters.AddWithValue("@BIN ", b);
    
        try
        {
            connection.Open();
            Int32 rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine("RowsAffected: {0}", rowsAffected);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    

    编辑:这假设 b 已经是 byte[]。我只是查看了一些旧代码并将参数更新为对我有用的参数(SQL Server 2005)

    【讨论】:

      【解决方案3】:

      是的,我认为您可以使用参数化查询来做到这一点。

      在此处找到示例:http://www.akadia.com/services/dotnet_read_write_blob.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-15
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 2012-10-15
        • 2019-08-01
        相关资源
        最近更新 更多