1

再利用が多い SQL 関数を作成したいのですExecuteNonQueryが、最大の問題はパラメーターです。

SQLスクリプトを簡単に渡すことができるように、これを単純かつ回復力のあるものにするために他の人が何をするかはわかりません。

たとえばSELECT * FROM table WHERE userid = @userid AND isactive = @isactive、おそらく peramiters は配列にすることができます。

public void ExecuteSQLCeNonQuery(string _Sql, ?parameter array of some type?)
{
    SqlCeConnection sCon = null;
    SqlCeCommand sCmd = null;
    int countOf = 0;

    try
    {
        sCon = new SqlCeConnection( sqlConnectionStringLocal);
        sCmd = new SqlCeCommand(_Sql, sCon);

        sCmd.Parameters.AddWithValue("@recBatchDateTarget", sDateOnly); <----- I know this will have to parse the collection some how.

        sCon.Open();
        countOf = (int)sCmd.ExecuteNonQuery();
        sCon.Close();
    }
    catch (SqlCeException ex)
    {
        Console.WriteLine("** DEBUG: ExecuteSQLCeNonQuery: {0} - {1}", ex.Message, sSql);
    }
    finally
    {
        if (sCmd != null)
            sCmd.Dispose();

        if (sCon != null)
            sCon.Dispose();
    }
}

パラメータの配列またはコレクションを処理する方法に関する提案はありますか?

4

3 に答える 3

1

うさぎの穴をたどって、この投稿に行きましょう。パラメータの .AddRange メソッドが機能するはずです。

SqlCeParameterCollection の使用方法

于 2013-06-06T17:11:33.597 に答える
1

として宣言するだけでIEnumerable<SqlParameter>、呼び出し元が必要なコレクション (配列List<SqlParameter>、...)を提供できるようになります。

public void ExecuteSQLCeNonQuery(string _Sql, IEnumerable<SqlParameter> parameters)
{
    ...
    if (parameters != null) // Null check so caller can pass null if there are no parameters
    {
        foreach(SqlParameter parameter in parameters)
        {
            cmd.Parameters.Add(parameter);
        }
        ...
    }
}
于 2013-06-06T17:11:52.520 に答える
0

データにアクセスするための別のクラスを作成し、そこにメソッドを配置することもできます (削除メソッド、更新、挿入など)。接続文字列は、常に同じデータベースにアクセスする場合、メソッドの外にある可能性があります。メソッドのパラメーターでは、フォーマットされた sql ステートメントで文字列を渡すことができ、sqlcommand オブジェクトをそのパラメーターに設定します。そのクラスを静的またはパブリックにすることができます(その後、クライアントフォームでインスタンス化する必要があります)。

例:クライアントフォーム内....

string query = "SELECT * from tablename";
sqlaccessclass sqlclass = new sqlaccessclass();
sqlclass.GetAll(query);

データメソッドをフェッチするための戻り値の型は DataSet になりますが、ExecuteNonQuery メソッドでは無効になります。

于 2013-06-06T17:13:58.367 に答える