2012-01-10 13 views
2

SQLテーブルからバックスラッシュを含む文字列を読み取ろうとしています。何らかの理由で私は文字列の中にバックスラッシュを渡すことができません。 私の文字列は、ユーザー名とその次の形式である:ドメイン\ユーザー名 私がように、それをテーブルに送る:SQLテーブルからバックスラッシュを含む文字列を読み取ることができません

SqlCommand scomm = new SqlCommand(); 
    SqlDataReader sr; 
    string nameOfUser = "Domain\userName"; 
     scomm.CommandText = "SELECT * FROM tableOfUsers WHERE UserName=" + nameOfUser; 
sr = scomm.ExecuteReader(); 

デバッグ時には、私はしかし、別のバックスラッシュをエスケープ文字として追加されていることがわかりますSQLの部分に何が起こるのか、また例外がスローされる理由はわかりません。私は@を使ってみましたが、それでも役に立たなかった。 私があなたに私に提供できる助けに感謝します。

+3

あなたは「例外がスローされる」または「私はエラーが出る」、**非常に次の事を言う**あなたの指は、タイピングはあなたが得る**正確な**エラーまたは例外メッセージで開始する必要があります。あなたの画面はここから見ることができず、あなたの気持ちも読めません。 –

+0

ここに私が得たエラーがあります: "'\'の近くの構文が間違っています。" – user1094315

答えて

10

SqlParameterを使用してください。

string nameOfUser = @"Domain\userName"; 
scomm.CommandText = "SELECT * FROM tableOfUsers WHERE [email protected]"; 
scomm.Parameters.Add("@username",SqlDbType.VarChar,30).Value=nameOfUser; 
//open the connection 
SqlDataReader sr=scomm.ExecuteReader(); 
if(sr.Read()) // use while loop when one or more exists 
{ 
    Console.WriteLine(sr["columnName"] + " or use column ordinal : " + sr[0]); 
} 
+1

+1 - 私は '.Add(...)の前にその構文を見たことがありません。Value = nameOfUser' - cool –

+0

ありがとうございましたAVD、私はこれを試して、今私はこの例外が表示されます:"プレゼント。 "テーブルにはデータがあります。私も接続状態をチェックし、読み取りを実行する前に開いています。 – user1094315

+0

@ user1094315 - DataReader.Read()メソッドを呼び出す必要があります。このメソッドは行を取得し、データがある場合はtrueを返します。 – adatapost

4

あなたは、文字列リテラル

string nameOfUser = @"Domain\userName"; 

または

string nameOfUser = "Domain\\userName"; 

あなたのバックスラッシュをエスケープを使用することができますあなたのクエリはまた、それに多少の誤差があります。あなたは理論的に

string nameOfUser = @"Domain\userName"; 
scomm.CommandText = "SELECT * FROM tableOfUsers WHERE UserName= '" + nameOfUser + "'"; 

にnameOfUser

の前後に引用符を配置する必要がありますしかし、あなたは 本当には、これは Sql Injection attacksに対するあなたを守り、そして、より多くのmundanelyます

string nameOfUser = @"Domain\userName"; 
scomm.CommandText = "SELECT * FROM tableOfUsers WHERE UserName= @name"; 
scomm.Parameters.AddWithValue("@name", nameOfUser); 

をパラメータ化クエリを使用する必要がありますあなたのクエリが動作するようになります'のような「O'Reilly」を持つ人々と

+0

ありがとうアダム、私はこれを試してみたと同じ今、私はこの例外が表示されます: "データが存在しないときに読み込みが無効です。"テーブルにはデータがあります。私も接続状態をチェックし、読み取りを実行する前に開いています。 – user1094315

+0

@ user1094315 - わからないあなたのAD.netオブジェクトをどのように実行して読み込んでいるかにはいくつかの問題があります。更新されたコードで新しい質問を投稿します。 –

+0

問題が見つかりました。問題は私が読んでいたテーブルでした。別のテーブルに変更した後は、何の問題もありませんでした。私はいくつかの破損したデータがあったと思います。ご協力いただきありがとうございます。 – user1094315

2

SqlParameterを使用します。 Sql Parameter Documentation。 SqlPrameterクラスはSql Injectionsやその他の問題を回避する機能を提供するため、dbは使用できません。

string UserName = @"Domain\userName"; 
scomm.CommandText = "SELECT * FROM tableOfUsers WHERE [email protected]"; 
scomm.Parameters.AddWithValue("@username",UserName); 
関連する問題