2017-03-06 3 views
0

こんにちは、ありがとうございました。データをソートするSQLコマンドを開く

SQLデータベースからの読み取りに問題があります。

私は

SqlCommand com = new SqlCommand("Select * From Stock where Fuad > 0 ", con); 

列名を指定した場合、コマンドが100%に動作しますが、問題は私のプログラムは、ユーザー間の在庫移動を追跡していることである、と私は

String currentuser = //(current user logged in, passed when logged in) 
SqlCommand com = new SqlCommand("Select * From Stock where '" + currentuser + "' > 0 ", con); 
のようなコマンドを使用する必要があります

このコードを実行すると、エラーが発生します: "varchar値 'Fuad'をデータ型intに変換するときに変換に失敗しました。今私はSQLの私の列がIntに設定されていることを知っている。それが列名にどのような影響を及ぼしますか?

私はすべてのユーザーにこの記事を書いてもらえますが、長期的には新しいスタッフの皆さんは無意味です。私は更新を書かなければなりません。これを手助けするために一般的な呼び出し元、すなわちcurrentuserを使用する方法があります。

SQLデータベースはintカラムで設定され、各カラムには技術者/スタッフ名があり、現在予約している各パーツの数を追跡します。

私が使用する文字列がvarcharになるため、列名をIntとして呼び出す方法はわかりません。

これをロードするための完全なコードは

  SqlConnection con = new SqlConnection(Connectstring) 
      con.Open(); 
      SqlCommand com = new SqlCommand("Select * From Stock where '" + currentuser + "' > 0 ", con); 

      try 
      { 

       SqlDataReader dr = com.ExecuteReader(); 
       while (dr.Read()) 
       { 
        ListViewItem item = new ListViewItem(dr["ItemName"].ToString()); 
        item.SubItems.Add(dr["ItemCode"].ToString()); 
        item.SubItems.Add(dr[currentuser].ToString()); 
        listView1.Items.Add(item); 

       } 
       dr.Close(); 

であると言ったように私は、列名を持つ「CurrentUserに」を交換する場合は、以前、これは100%に動作します。それを文字列で呼び出すことは可能ですか?そうでない場合は、これを行う別の方法を見つける必要があります。

+1

'sqlのカラムがIntに設定されていることがわかりました。カラム定義とsqlのサンプルデータをいくつか貼り付けることができますか? –

+0

currentuserは何を返しますか? – Usman

答えて

2

[Fieldname]を使用して、この方法を試してみてください:

String currentuser = //(current user logged in, passed when logged in) 
SqlCommand com = new SqlCommand("Select * From Stock where [" + currentuser + "] > 0 ", con); 
+0

'Fuad'はキーワードではないので、[]は必要ありませんか? –

+0

[]を使用するのは、すべてのselectコマンドのベストプラクティスです。これがあなたがdownvotedの理由なら、あなたのdownvoteは間違っています。 –

+0

私はあなたの答えに投票していませんでした。 –

0
String currentuser = //(current user logged in, passed when logged in) 
SqlCommand com = new SqlCommand("Select * From Stock where " + currentuser + " > 0 ", con); 

ちょうど列名 "'" のためにその単一のブラケットを使用しないでください。

関連する問題