输入到SQL存储过程

时间:2012-09-10 18:17:43

标签: c# asp.net sql tsql query-string

我试图从URL中获取一个查询字符串并将其发送到MSSQL中的存储过程。查询字符串是varbinary类型,当我尝试发送它时,我的应用程序抛出一个异常。我还想在我的storedprocedure底部返回select语句,简单地说Select 'Processed'

4 个答案:

答案 0 :(得分: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;
        }

答案 1 :(得分: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

答案 2 :(得分:0)

你不应该为二进制文件发送一个字节数组(byte[])吗?我不认为它会接受纯粹的字符串。尝试使用System.Text.Encoding.UTF8.GetBytes方法将其转换为字节数组。

更新:这个问题的答案告诉我们为二进制数据使用特殊类型:What SqlDbType maps to varBinary(max)?

答案 3 :(得分:0)

Aghilas已指定如何将值分配为字节数组,并在第二行中指定 以及作为值传递的常规方式