2011-02-10 5 views
3

私はのMembershipProviderを拡張するクラスで、次のようなコード(以下のコードはやや匿名化および簡素化されている)を持っている:パラメータ化されたクエリがASP.NETで動作しないのはなぜですか?

SqlConnection conn = new SqlConnection("Integrated Security=;Persist Security Info=False;User ID=WEBUSER;Password=WEBPASSWORD;Initial Catalog=DATABASENAME;Data Source=SERVERNAME"); 
SqlCommand cmd = new SqlCommand("SELECT Password FROM Membership " + 
    " WHERE Username = ?", conn); 

cmd.Parameters.Add("@Username", System.Data.SqlDbType.NVarChar, 25).Value = "TestUser"; 

SqlDataReader reader = null; 

try 
{ 
    conn.Open(); 
    reader = cmd.ExecuteReader(); // Execution breaks here. 

それはcmd.ExecuteReaderに取得するコード区切りを();スローされる例外は、 "System.Data.SqlClient.SqlException: '?'の近くに不正な構文があります。"

「?」のように振る舞っているようです。コマンドテキスト中の文字列が正しくパラメータとして解釈されていません。私は何が間違っているのか分かりません。私はASP.NETが少し錆びていることは認めていますが、前に何十回もこのようなコードを書いています。上に書いたすべての内容は、チュートリアルやMSDNの例に見られる使用パターンに似ています。誰かが私が間違っていることを教えてもらえますか?

対象の.NETバージョンは4.0です。 ASP.NETは、ExpressのVisual Web Developerのデバッグ環境内で私のローカルマシン上で実行されている2010データベースは、SQL Server 2005の

+0

誰かがInterbaseを使用するのに時間がかかりすぎました;) –

+0

@Neil No!待って...はい。 –

答えて

5

には ' ? '構文は、私が知る限り、ODBCの構文です。ここでは、 をSQLに直接接続しています。代わりに '@ユーザ名'を使用してください。

+0

それだった!私はそれを理解できないとは信じられません。私は以前は一般的にODBCコードを使用していたと思いますが、今回は何をしていたのかが分かりませんでした。 –

+0

+1これはなぜ異なっているのかの追加の説明を提供します。あなたへの誇り。 – David

5

変更

WHERE Username = ? 

WHERE Username = @Username 
+0

それはそうしました。ありがとう! –

+0

ありがとうございます。両方の答えは正しかったし、助けになり、多かれ少なかれ同じ時刻に投稿された。しかし、私はそのうちの1つしか受け入れることができないので、もう1つは「理由」と「方法」を説明したため、受け入れました。 –

+0

@ジョシュアカーモディ - 私はもっと同意できませんでした。彼はそれに値する! – David

関連する問題