0

実行時にSQLParameterを作成し、それをSQLCommandに追加できるかどうかに興味があります。

私がやろうとしていることは次のとおりです。

public void addParameters(string paramName, paramType, SqlParameter paramCommand)
{
    SqlParameter myParameter = new SqlParameter("@" + paramName, paramType);
    paramCommand.Parameters.Add(myParameter);
}

問題は paramType を渡すことです。それはSqlDbTypeであり、わかりません:

1.ここで実装/使用する方法
2.いつこの関数を呼び出すか。

注: SQLCommandオブジェクトにパラメーターを追加したいだけです。それは次のようなものです:

SqlParameter myParameter = new SqlParameter("@user", SqlDbType.Char);
4

4 に答える 4

4

このようなもの:

public static class CommandExtensions
{
    public static void AddParameter(this IDbCommand command, string name, object value)
    {
        if (command == null) throw new ArgumentNullException("command");
        if (name == null) throw new ArgumentNullException("name");

        var p = command.CreateParameter();
        p.ParameterName = name;
        p.Value = value ?? DBNull.Value;
        command.Parameters.Add(p);
    }
}

これにより、次のことが可能になります。

using (var command = connection.CreateCommand())
{
    command.CommandText = "SELECT * FROM Users WHERE FirstName LIKE @name";
    command.AddParameter("name", "J%");

    // [...]
}

このコードは ADO.NET ドライバーからも独立しているため、ADO.NET を使用するほとんどのプロジェクトで再利用できます。再利用可能な ADO.NET コードの記述について詳しく知りたい場合は、私の記事を読んでください: http://blog.gauffin.org/2013/01/ado-net-the-right-way/

問題は paramType を渡すことです。それは SqlDbType であり、わかりません

通常、db タイプを指定する必要はありません。

于 2013-01-14T07:38:19.450 に答える
2

あなたのアプローチは正しいです:

cmd.Parameters.Add(new SqlParameter("@Name", "Frank Rizzo"));

注意すべきことの 1 つは、SqlParameter コンストラクターが多数のオーバーロードを提供するため、新しい SqlParameter を返す別の関数を作成する必要がほとんどないことです。

于 2013-01-14T07:39:29.897 に答える
1

ADO.NETにSQLパラメータを追加する方法はいくつかあります。データは文字列として送信され、SQLサーバーによって暗黙的に変換されるため、通常、SQLデータベースタイプを指定する必要はありません。

MSDNは次の例を引用しています-

command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;

// Use AddWithValue to assign Demographics.
// SQL Server will implicitly convert strings into XML.
                                                command.Parameters.AddWithValue("@demographics", demoXml);

最初の例は次のように書くこともできます-

command.Parameters.Add("@ID", SqlDbType.Int).Value = customerID;

詳細については、 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters (v = vs.100).aspxを参照してください。

明らかに、SQLデータ型と一致しないデータを提供するとSQL例外が発生します。長さの制限を設定し、入力を検証する必要があります。正規表現と同様に、「as」構文を使用してローカルで互換性のある型に変換すると便利です。

jgauffinの答えは、DBタイプを含む構文を使用するように簡単に適合させることができますが、割り当てられた値に関係なくタイプの警告が表示されないため、またはコマンドの実行を試みます。

于 2013-01-14T09:46:01.733 に答える
1

jgauffinの答えに加えて:

SqlParameter を作成するときに、パラメーターの SqlDbType がわからない場合は、パラメーター名と値のみをパラメーターとして受け取る SqlParameter コンストラクターを使用できます。つまり; SqlParameter コンストラクター (文字列、オブジェクト) .

MSDN ドキュメントを参照するには、

value パラメーターでオブジェクトを指定すると、SqlDbType はオブジェクトの Microsoft .NET Framework 型から推測されます。

于 2013-01-14T07:42:29.303 に答える