我正在尝试填充这个字段。
我是这样做的
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函数来运行这个查询。
请注意,正在执行的查询是这样的。
我做错了什么?我们如何将一个blob插入到一个varbinary(max)字段中?
你插入的是文字参数名('@tifBytes'
),这会导致SQL尝试在VARBINARY列中插入字符串"@tifBytes",因此出现错误。去掉参数周围的单引号。
另外,不要这样构建SQL。文件名中可以有单引号。当然,这看起来像是一段代码构建SQL,另一段代码提供参数并运行查询,但是请重新设计。