変数からの "where"を使ってフィールドを表示するsqlクエリがあります。 私は私の変数に値がある機能エスケープ文字列を避けるC#
文字列 empCodeから渡されていここ
は私のコードだ " \\(は!":結果が0になると、私のC#ではpublic List<int> GetSuccessAndFailedCountForTodayForAgent(string empCode)
{
var result = new List<int>();
string query = "SELECT (SELECT COUNT(*) FROM BusinessTransactions WHERE STATUS='Failed' AND ENTEREDDATE='" + DateTime.Now.Date.ToShortDateString() + "' AND AgentEmployeeCode='" + empCode + "') AS FAILED_COUNT, (SELECT COUNT(*) FROM BusinessTransactions WHERE STATUS='Completed' AND ENTEREDDATE='" + DateTime.Now.Date.ToShortDateString() + "' AND AgentEmployeeCode='" + empCode + "') AS SUCCESS_COUNT";
using (SqlConnection conn = new SqlConnection(asynchPaymentDBConnectionString))
{
conn.Open();
using (SqlCommand s = new SqlCommand(query, conn))
{
using (SqlDataReader reader = s.ExecuteReader())
{
try
{
if (reader.HasRows)
{
while (reader.Read())
{
result.Add(reader.GetInt32(0));
result.Add(reader.GetInt32(1));
}
}
}
catch (Exception ex)
{
//do something
}
}
}
}
return result;
}
- 0 SQL Serverに直接2 - 0の結果を表示しようとするとき
文字列!は、(
どのように私は、文字列を使用することができます\!として扱われている!\\(私のwhere句に?
EDIT:
私は追加のパラメータを使用してみました:
s.Parameters.Add("@EmployeeCode", SqlDbType.NVarChar, 16);
s.Parameters["@EmployeeCode"].Value = empCode;
はまだあなたが使用することができますいずれかのC#の文字列ダブルバックスラッシュまたはプレフィックスにバックスラッシュをエスケープするに
あなたのクエリをパラメータ化してみてください。 –
あなたのコードは[SQL Injection](http://www.w3schools.com/sql/sql_injection.asp)に脆弱です。 @FelixPamittanのように、[parameters](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters%28v=vs.110%29.aspx)を使用してビルドする必要がありますちょうど文字列を連結するのではなく、あなたのクエリ。 –
重複してリンクされています。http://stackoverflow.com/questions/5468425/how-do-parameterized-queries-help-against-sql-injection質問SQLインジェクションについて説明し、問題を解決する方法を示します –