如何从blob上传字节[]到varbinary(max)到sql?

问题描述 投票:-1回答:1

我正在尝试填充这个字段。

enter image description here

我是这样做的

using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();
    SqlTransaction transaction = conn.BeginTransaction();

    //here we are iterating through a list of queries that we want to execute inside of this transaction
    foreach (var query in queries)
    {
        //retrieve blob bytes from azure
        byte[] tifBytes = ReadInputName(query.TifFileName);
        byte[] rtfBytes = ReadInputName(query.RtfFileName);

        SqlCommand cmd = new SqlCommand(query.Query, conn, transaction);
        var rtfBytesParam = new SqlParameter("@rtfBytes", SqlDbType.Binary)
        {
            Value = rtfBytes
        };
        var tifBytesParam = new SqlParameter("@tifBytes", SqlDbType.Binary)
        {
            Value = tifBytes
        };
        cmd.Parameters.Add(rtfBytesParam);
        cmd.Parameters.Add(tifBytesParam);
        int rowsAffected = cmd.ExecuteNonQuery();
    }

    transaction.Commit();
}

以下是我得到的异常情况,特别是: Core .Net SqlClient数据提供者。不允许从数据类型varchar到varbinary(max)的隐式转换。使用convert函数来运行这个查询。

enter image description here

请注意,正在执行的查询是这样的。

enter image description here

我做错了什么?我们如何将一个blob插入到一个varbinary(max)字段中?

c# tsql azure-functions azure-storage-blobs
1个回答
1
投票

你插入的是文字参数名('@tifBytes'),这会导致SQL尝试在VARBINARY列中插入字符串"@tifBytes",因此出现错误。去掉参数周围的单引号。

另外,不要这样构建SQL。文件名中可以有单引号。当然,这看起来像是一段代码构建SQL,另一段代码提供参数并运行查询,但是请重新设计。

© www.soinside.com 2019 - 2024. All rights reserved.