0

richTextBoxとbuttonを備えたシンプルなアプリケーションがあります。ユーザーは、richTextBoxに数値(整数)を入力します(1行に1つの数値)。

彼がボタンをクリックすると、SQLクエリを生成したいと思います。

基本的に、次のように整数をクエリに渡すと機能します。

SELECT price from products where ID IN (1, 2, 3, 4)

これは、ユーザーがrichTextBoxの行として1、2、3、4を入力した場合です。

しかし、整数の代わりにbinary(8)を渡したいと思います。

これは私の元のコード行です:

cmdString += " IN (" + string.Join(", ", richTextBox1.Lines) + ") ";

私はこのようにLINQでそれを変更しようとしました:

cmdString += " IN ("
+ string.Join(", ", richTextBox1.Lines.Select(c => 
    { c = "0x"+Convert.ToString(Convert.ToInt32(c), 16); 
     return c; 
    }).ToArray())
+ ") ";

私が欲しいもの:

たとえば、次のように変換します。

 1   to  0x0000000000000001
30   to  0x000000000000001E

私はあなたがポイントを得ることを望みます。

アップデート:

私はこれをしました:

textBox1.Text = string.Join(", ", richTextBox1.Lines.Select(c =>
    {
        c = "0x" + "0000000000000000".Substring(0, (16 - Convert.ToString(Convert.ToInt32(c), 16).Length)) + Convert.ToString(Convert.ToInt32(c), 16);
        return c;
    }).ToArray());

2番目Convert.ToString(Convert.ToInt32(c))の使用法を削除する方法はありますか?それとも別の方法でそれをしますか?

4

2 に答える 2

1

これを foreach ループで行います。

var query = "Select ... In( ";

foreach(var item in Lines)
{
   int a = 0;
   if (!int.TryParse(item, out a))
     throw new IllegalInputException();
   query += "0x" + Convert.ToString(a, 16).PadLeft(16, '0');
}
...

または、linq クエリで実行できますが、foreach のように読みにくい:

cmdString += " IN (" 
+ string.Join(", ", richTextBox1.Lines.Select(c => 
    { c = "0x"+Convert.ToString(Convert.ToInt32(c), 16)
               .PadLeft(16, '0'); 
     return c; 
    }).ToArray())  

+ ") ";
于 2012-04-13T10:26:36.720 に答える
0
var binaryStrings = richTextBox1.Lines
                    .Select(str => String.Format("'0x{0}'", 
                                   Convert.ToString(int.Parse(str), 16)));
var cmd = String.Format("SELECT price from products where ID IN ({0})", 
                                   String.Join(",", binaryStrings));

Convert.ToString メソッド (Int32、Int32)

于 2012-04-13T10:25:55.033 に答える