0

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 インジェクションからクエリを保護する方法は何ですか?

4

2 に答える 2