以字节[]c#为单位的字符串值

本文关键字:字符串 为单位 字节 | 更新日期: 2023-09-27 18:30:03

我必须执行查询才能在SQL表中插入值。值的类型是varbinary,我有一个带十六进制值的字符串要插入

using (SqlCommand dbCommand = new SqlCommand("INSERT INTO [Link] ([Record]) values (CONVERT(varbinary,@myrecord);", dbConn))
dbCommand.Parameters.Add("myrecord", System.Data.SqlDbType.VarBinary).Value = recordString;

但我有这样的错误:无法将参数值从字符串转换为字节[]。

所以我试着把字符串转换成byte[],但我在这个网站上找到的所有函数都把字符串转换为byte,改变它的值,所以这不好,因为我的字符串在我需要插入到表中的值里面。

重述:我有一个值为"0x54000000006C00000000099W043100300030003100"的字符串,如何将其添加到带有varbinary字段的SQL表中?

以字节[]c#为单位的字符串值

好吧,我想我现在明白了。如果您使用的是sql server 2008+,则可以执行以下操作:

using (SqlCommand dbCommand = new SqlCommand("INSERT INTO [Link] ([Record]) values (CONVERT(varbinary,@myrecord,1);", dbConn))
dbCommand.Parameters.Add("myrecord", System.Data.SqlDbType.VarChar).Value = recordString;

注意CONVERT(varbinary,@myrecord,1)中的1。顺便说一句,你给我们的示例数字不是有效的十六进制数字。。。

更多信息:Msdn

您可以也应该能够做到这一点,确保调整VarBinary大小以适合您的情况

using(SqlCommand dbCommand = new SqlCommand("INSERT INTO [Link] ([Record]) values(@myrecord);", dbCon))
{
    // Replace 8000, below, with the correct size of the field
    dbCommand.Parameters.Add("@myrecord", System.Data.SqlDbType.VarChar, recordString.Length).Value = recordString;
    dbCommand.ExecuteNonQuery();//wrap around a try catch if you need to catch exceptions
}