SQL Serverのデータベースからユーザー名を選択する必要があります。 SqlCommand
によって生成されるクエリは、SQL Server Management Studioでは動作しますが、自分のコードでは動作しません。C# - SqlCommandでクエリが機能しない
これは、AFFAQPC/affaq
の入力が/
の場合にのみ発生します。
コードは:
public int? getid()
{
SqlConnection Db = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
Db.Open();
// Searching for id in Users table from the logged in username
SqlCommand command = new SqlCommand("SELECT TOP 1 id FROM UsersLogin where username = '@user1';", Db);
command.Parameters.AddWithValue("@user1", userName);
string query = command.CommandText;
foreach (SqlParameter p in command.Parameters)
{
query = query.Replace(p.ParameterName, p.Value.ToString());
}
Trace.WriteLine(query);
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
Trace.WriteLine("111");
int id = Convert.ToInt32(reader["id"]);
Trace.WriteLine(id);
Db.Close();
return id;
}
}
Db.Close();
return null;
}
入力/
が含まれている場合、エラーが発生します。 SqlCommand
で生成され
クエリ:
SELECT TOP 1 id
FROM UsersLogin
WHERE username = 'AFFAQPC\affaq';
[IDisposable](https://msdn.microsoft.com/en-us/library/system.idisposable(v = vs.110).aspx)オブジェクト(「SqlConnection」など)を正しく処理していません。 – mason
C#の文字列では、バックスラッシュはエスケープ文字です。 C#でこのクエリを作成している場合、それは文字列リテラルです。文字列の前に "@"を使用して、エスケープ文字を指定しないでリテラル文字列を指定したいとします:username = @ 'AFFAQPC \ affaq'; – pmbAustin
あなたは 'userName'変数がどこから来たのかわかりません。 – mason