SqlCommand
テーブルプレフィックスを構成ファイルに保持し、実際のテーブル名に追加して各クエリで使用することが可能であり、良い方法であるかどうか疑問に思っています。そのため、同じテーブル構造を持つ 2 つのアプリケーションは、データを共有せずに同じデータベースを使用できます。
今のところ、私のSqlCommand
クエリはすべて次のようになっています。
using (var connection = new SqlConnection(connString))
{
using (SqlCommand sqlCmd = new SqlCommand("SELECT * from SomeTable", connection))
{
connection.Open();
using (SqlDataReader dr = sqlCmd.ExecuteReader())
{
if (dr.HasRows)
{
while (dr.Read())
{
Model _record = new Model();
_record.ID = Convert.ToInt32(dr["ID"]);
_record.Value = Convert.ToString(dr["Value"]);
RecordsList.Add(_record);
}
}
}
connection.Close();
return RecordsList;
}
}
または:
using (var connection = new SqlConnection(connString))
{
using (SqlCommand sqlCmd = new SqlCommand("UPDATE SomeTable SET Value = @Value " +
"WHERE ID = @Id;", connection))
{
sqlCmd.Parameters.Add("@Value", System.Data.SqlDbType.NVarChar).Value = _record.Value;
sqlCmd.Parameters.Add("@Id", System.Data.SqlDbType.Int).Value = _record.Id;
connection.Open();
sqlCmd.ExecuteNonQuery();
connection.Close();
}
}
ご覧のとおり、パラメーターを使用していますが、テーブル名にパラメーターを使用することはできません。
prefix_
テーブル名の先頭に追加したい場合、SQL インジェクションからクエリを保護する方法は何ですか?