2011-11-14 5 views
1

テーブルの内容をデータテーブルに取り込む関数があります。しかし、それはWHERE句に与えた値と迷惑な無効な列名エラーを表示しています。 SQLサーバーのwhere句の列の値が無効です

public static DataTable GetRequests(string empid) 
{ 
    DataTable dt = new DataTable(); 
    string strConnection = ConfigurationManager.AppSettings["connStr"]; 
    using (SqlConnection connection = new SqlConnection(strConnection)) 
    { 
     connection.Open(); 
     SqlCommand sqlcmd = new SqlCommand(); 
     SqlDataAdapter sAdap = new SqlDataAdapter();     
     sqlcmd.Connection = connection; 
     sqlcmd.CommandType = System.Data.CommandType.Text; 
     sqlcmd.CommandText = "Select * from requests Where emp_id=P001";     
     sAdap.SelectCommand = sqlcmd; 
     sAdap.Fill(dt); 
    } 
    return dt;    
} 

は今、これで私は

sAdap.fill 

でエラーを取得していますし、エラーが、私はこの時に困惑

invalid column name P001 

です。なぜ私はこの問題に直面しているすべてのアイデア?

答えて

5

文字定数の場合は、一重引用符で囲みます。 'P001'またはそれ以上には、それをパラマリ化する。

2

値の前後に文字列区切り文字が必要です。行を次のように変更してください:

sqlcmd.CommandText = "Select * from requests Where emp_id='P001'"; 

P001の前後に一重引用符を使用すると問題ありません。

+0

aww私は自分自身の愚か者を作るときに嫌い、感謝の男 – swordfish

1

一重引用符を使用する必要があります。

where emp_id='P001' 
0

あなたのP001データは文字列型のようです。それをSQL文字列として入力する前に一重引用符で引用してみてください。

sqlcmd.CommandText = "Select * from requests Where emp_id='P001'"; 

それはのようにあなたのような文を試すことができます(それが必要が)うまくいかない場合:あなたは、単一引用符を使用して(apparrently)テキスト基準を囲む必要があり

sqlcmd.CommandText = "Select * from requests Where emp_id like 'P001'"; 
0

sqlcmd.CommandText = "Select * from requests Where emp_id = 'P001'";