0

私のシナリオでは、15 列のデータを持つ SQL ステートメントを挿入したいと考えています。挿入ステートメントのパラメーターを処理する他の方法はありますか?

    public bool GetCustomersList(ref DataSet dataset, String x, String y, string z, string x1, string y1, string z1 )
    {
        MySqlConnection SQLConn = GetConnection();
        try
        {
            string get_records;
            if (SQLConn.State == ConnectionState.Closed)
            {
                SQLConn.Open();
            }
            if (searchtype == "x")
            {
                get_records = "INSERT into table values(x, y,z,x1,y1,z1);
            }
            MySqlCommand command = new MySqlCommand(get_records, SQLConn);
            MySqlDataAdapter mySqlAdapter = new MySqlDataAdapter(command);
            mySqlAdapter.Fill(dataset);

            if (SQLConn.State == ConnectionState.Open)
            {
                SQLConn.Close();
            }
            return true;
        }
        catch (Exception )
        {
            if (SQLConn.State == ConnectionState.Open)
            {
                SQLConn.Close();
            }
            return false;
        }
    }

ここで、パラメータは 15 以上に拡張される可能性がありますか?asp.net でこの状況を処理するにはどうすればよいですか?

4

3 に答える 3

1

これはそれを行います。

            List<SqlParameter> myParamList = new List<SqlParameter>();
            SqlParameter myParam = default(SqlParameter);


            myParam = new SqlParameter("@RoomID", SqlDbType.Int);
            myParam.Value = x
            myParamList.Add(myParam);

基本的に、パラメータ リストを作成し、新しい SqlParameter を使用して各パラメータを追加し、アイテム名とアイテム タイプに注意します。

次に、パラメーター リストをコマンドに追加します。

于 2012-11-05T12:36:24.807 に答える
1

使用することをお勧めします:

command.Parameters.Add( ... );
于 2012-11-05T12:31:14.280 に答える
0

MSDNから:

CreateParameter メソッドを使用して、指定された名前、型、方向、サイズ、および値を持つ新しい Parameter オブジェクトを作成します。引数に渡す値は、対応する Parameter プロパティに書き込まれます。

インライン パラメーターの使用は安全ではなく、SQL インジェクションが発生する可能性があります。SqlParameter代わりに使用することは、 .Net の sql ステートメントにパラメーターを提供するための推奨されるより安全な方法です。

さらに、コードから特定の実装に依存するものを取り除き、より純粋にしたい場合は、代わりにより多くのインターフェースを使用してください。次に例を示します。

using (var connection = GetConnection())
{
    connection.Open();
    using (var command = connection.CreateCommand())
    {
        command.CommandType = CommandType.Text;
        command.CommandText = "INSERT into table(x, y) VALUES (@x, @y)";
        command.Parameters.Add(CreateParameter(command, "@x", x, DbType.String));
        command.Parameters.Add(CreateParameter(command, "@y", y, DbType.String));
        command.ExecuteNonQuery();
    }
}

カスタムCreateParameterラッパーには次の実装があります。

private IDataParameter CreateParameter(IDbCommand command, string name, object value, DbType type)
{
    var parameter = command.CreateParameter();
    parameter.ParameterName = name;
    parameter.Value = value;
    parameter.DbType = type;
    return parameter;
}

同じように、次のような冗長な特定のクラス タイプを破棄しMySqlCommandますSqlParameter。また、使用する必要はありませんtry{} catch{}Usingステートメントは、例外がスローされた場合でも、破棄時に接続を閉じます。必要がない場合は、各リクエストの前後に接続を開いたり閉じたりしないでください。接続プーリングを利用します。

于 2012-11-05T13:48:14.163 に答える