0

URLからクエリ文字列を取得して、MSSQLのストアドプロシージャに送信しようとしています。クエリ文字列はvarbinary型であり、送信しようとすると、アプリケーションが例外をスローします。また、ストアドプロシージャの下部にあるselectステートメントを返したいと思いました。Select 'Processed'

4

4 に答える 4

2

16進コードを解析してデータベースに送信する関数を実際に作成する必要がありました

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

Aghilas は、値をバイト配列として割り当てる方法を指定しており、2 行目と通常の値として渡す方法を指定しています。

于 2012-09-11T20:46:37.473 に答える
0

byte[]バイナリのバイト配列 ( ) を送信するべきではありませんか? 純粋な文字列を受け入れるとは思わない。System.Text.Encoding.UTF8.GetBytesメソッドでバイト配列に変換してみてください。

更新: この質問の回答は、バイナリ データに特別な型を使用するよう指示しています: What SqlDbType maps to varBinary(max)?

于 2012-09-10T18:20:17.377 に答える