-1

実行時にコードでチェックされる列名と値の両方を渡そうとしています。ただし、「無効な列名」という例外が発生します。コードは次のとおりです。

string temp = TextBox1.Text.ToString();
SqlConnection con = new SqlConnection("data source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\Sagar\\Documents\\Test.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand com = new SqlCommand("Select * from Employee Where @field = Sagar", con);
com.Parameters.AddWithValue("@field", DropDownList1.SelectedValue.ToString());
//com.Parameters.AddWithValue("@value", temp);
SqlDataAdapter da = new SqlDataAdapter(com);
con.Open();
SqlDataReader reader = com.ExecuteReader();
GridView1.DataSource = reader;
GridView1.DataBind();
4

3 に答える 3

14

このメッセージは、テーブルに「Sagar」という名前の列がないことを示しています。そんなコラムある?エラー メッセージから推測するのではなく、テーブル スキーマを示していただけると、作業が簡単になります。


SqlParameterC#を使用して列名をパラメーター化することはできません。これは、ここで何度も議論されています。

クエリで何が起こっているかVidhya Sagar Reddyは、次のとおりです。彼は、次のクエリを想定しています。

Select * from Employee Where @field = 'Sagar'

パラメータ"Name"の値として設定すると、次のクエリに置き換えられます。@field

Select * from Employee Where Name = 'Sagar'

しかし、これは間違っています!何が起こっているかというと、@fieldパラメーターは次のように置き換えられます。

Select * from Employee Where 'Name' = 'Sagar'

WHERE節が alwaysであるため、これは結果を返しませんfalse。もちろん、フィールド name を使用するとSagar、これは常に を返しますtrue。ステートメントは次のようになります。

Select * from Employee Where 'Sagar' = 'Sagar'

上記のことを証明する簡単なテストを次に示します。次のステートメントを使用して@fieldパラメーターを設定します (テーブルに名前が付けられた列がないと仮定eirghoerihgohします)。

com.Parameters.AddWithValue("@field", "eirghoerihgoh");

クエリが正しく実行される場合 (おそらく結果が返されない場合)、上記は正しいです。正しくない場合は、eirghoerihgoh列が存在しないという例外をスローする必要があります。


Vidhya Sagar Reddy私の主張を証明してくれてありがとう。このラインを使うことで

com.Parameters.AddWithValue("@field", "eirghoerihgoh");

あなたは何の結果も得られなかったと言いますが、例外も得られませんでした。ただし、ステートメントが実際に変更された場合

Select * from Employee Where eirghoerihgoh = 'Sagar'

という名前の列がないという例外が必要でしたeirghoerihgoh。その例外が発生しなかったため、考えられる説明は 1 つだけです。ステートメントが次のように変更されました。

Select * from Employee Where 'eirghoerihgoh' = 'Sagar'

これは実行されますが、条件が always であるため、結果は返されませんfalse

于 2013-07-16T07:44:28.197 に答える
1

代わりに、この方法でコードを作成できます。これは完全に機能します。

"Select * from Employee Where "+DropDownList1.SelectedValue.ToString()+" =
'Sagar'" – Vidhya Sagar Reddy
于 2013-07-16T10:35:07.680 に答える
0

その理由は非常に単純です。SQL で指定する値は単一引用符で囲む必要があります。ちなみに、これは単純な間違いです..!!!!

SqlCommand com = new SqlCommand("Select * from Employee Where @field = 'Sagar'", con);

さらに、次の行でパラメーターを「@field」ではなく「field」に変更します..!!

com.Parameters.AddWithValue("field", DropDownList1.SelectedValue.ToString());

これは機能しています..> !!!!

于 2013-07-16T08:01:39.513 に答える