我想知道(在我的代碼下面),我確保dataID是一個文本(或varchar或int)在參數傳遞下面?C#和SQL參數,以防止注入
public T ExecuteQuery<T>(Func<IDataReader, T> getResult, string query, params IDataParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(this.DefaultConnectionString))
{
conn.Open();
// Declare the parameter in the query string
using (SqlCommand command = new SqlCommand(query, conn))
{
foreach (var parameter in parameters)
{
command.Parameters.Add(parameter);
}
command.Prepare();
using (SqlDataReader dr = command.ExecuteReader())
{
return getResult(dr);
}
}
}
}
public string GetMySpecId(string dataId)
{
return ExecuteQuery(
dr =>
{
if (dr.Read())
{
return dr[0].ToString();
}
return string.Empty;
},
"select specId from MyTable where dataId = @dataId",
new SqlParameter("dataId", dataId));
}
我用的代碼如下所示:
command.Parameters.Add(new SqlParameter("key", SqlDbType.Text));
command.Prepare();
command.Parameters[0].Value = dataId;
要不然怎麼在上面的代碼,做我通過兩個或多個參數代入的executeQuery?
它們是不同類型的? – cdub
我也想通過不同的類型,也許我應該將其更改爲字典? – cdub