1

我想构建一个具有大量重用的 SQL 函数,ExecuteNonQuery但我遇到的最大问题是参数。

我不确定其他人会做些什么来使这个简单而有弹性,以便我可以简单地传递 SQL 脚本。

例如SELECT * FROM table WHERE userid = @userid AND isactive = @isactive, 然后也许 permitters 可以是一个数组。

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 回答