我试图从 URL 中获取一个查询字符串并将其发送到我在 MSSQL 中的存储过程。查询字符串是 varbinary 类型,当我尝试发送它时,我的应用程序抛出异常。我还想在我的存储过程底部返回 select 语句,它只是说Select 'Processed'
问问题
1449 次
4 回答
2
必须实际创建一个函数来解析十六进制代码,然后将其发送到数据库
static byte[] ParseHexString(string value)
{
if (string.IsNullOrEmpty(value)) return null;
if (1 == (1 & value.Length)) throw new ArgumentException("Invalid length for a hex string.", "value");
int startIndex = 0;
int length = value.Length;
char[] input = value.ToCharArray();
if ('0' == input[0] && 'x' == input[1])
{
if (2 == length) return null;
startIndex = 2;
length -= 2;
}
Func<char, byte> charToWord = c =>
{
if ('0' <= c && c <= '9') return (byte)(c - '0');
if ('A' <= c && c <= 'F') return (byte)(10 + c - 'A');
if ('a' <= c && c <= 'f') return (byte)(10 + c - 'a');
throw new ArgumentException("Invalid character for a hex string.", "value");
};
byte[] result = new byte[length >> 1];
for (int index = 0, i = startIndex; index < result.Length; index++, i += 2)
{
byte w1 = charToWord(input[i]);
byte w2 = charToWord(input[i + 1]);
result[index] = (byte)((w1 << 4) + w2);
}
return result;
}
于 2012-09-17T14:42:04.813 回答
1
如果您希望 Byte[] 类型,您可以尝试使用此代码,您不传递字符串
cmd.Parameters.Add("@dec", SqlDbType.VarBinary).Value = ;//Relpace with your new Byte[]
或者如果你想要字符串类型,你可以尝试使用字符串类型
cmd.Parameters.Add("@dec", SqlDbType.VarChar).Value = QS;//Your string
链接:http: //msdn.microsoft.com/fr-fr/library/system.data.sqldbtype%28v=vs.80%29.aspx
于 2012-09-10T18:21:00.590 回答
0
你不应该byte[]
为二进制发送一个字节数组()吗?我认为它不会接受纯字符串。尝试使用System.Text.Encoding.UTF8.GetBytes
方法将其转换为字节数组。
更新:这个问题的答案告诉对二进制数据使用特殊类型:什么 SqlDbType 映射到 varBinary(max)?
于 2012-09-10T18:20:17.377 回答
0
Aghilas 指定了如何将值分配为字节数组,并在第二行以及作为值传递的常规方式
于 2012-09-11T20:46:37.473 回答