c# - 将多个 SqlParameter 传递给方法

标签 c# methods sqlparameter

在我的主窗体中,我已经实现了这段代码..

void SampleMethod(string name, string lastName, string database)
{
        SqlParameter sqlParam = new SqlParameter();
        sqlParam.ParameterName = "@name";
        sqlParam.Value = name;
        sqlParam.SqlDbType = SqlDbType.NVarChar;

        SqlParameter sqlParam1 = new SqlParameter();
        sqlParam1.ParameterName = "@lastName";
        sqlParam1.Value = lastName;
        sqlParam1.SqlDbType = SqlDbType.NVarChar;

        SqlParameter sqlParam2 = new SqlParameter();
        sqlParam2.ParameterName = "@database";
        sqlParam2.Value = database;
        sqlParam2.SqlDbType = SqlDbType.NVarChar;

        SampleClass sampleClass = new SampleClass(new DBConn(@serverName, tableName, userName, password));
        sampleClass.executeStoredProc(dataGridView1, "sp_sampleStoredProc", sqlParam, sqlParam1, sqlParam2);
}

在我的SampleClass中,我有这种方法。

public DataGridView executeStoredProc(DataGridView dtgrdView, string storedProcName, params SqlParameter[] parameters)
{
        try
        {
            DataTable dt = new DataTable();
            sqlDA = new SqlDataAdapter(storedProcName, sqlconn);
            sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure;
            sqlDA.SelectCommand.CommandTimeout = 60;

            // Loop through passed parameters
            if (parameters != null && parameters.Length > 0)
            {
                foreach (var p in parameters)
                    sqlDA.SelectCommand.Parameters.Add(p);
            }

            sqlDA.Fill(dt);
            dtgrdView.DataSource = dt;
            sqlconn.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            sqlconn.Close();
        }

        return dtgrdView;
}

我想做的是避免多次

SqlParameter sqlParam = new SqlParameter() 

在我的代码中,我已经为这个问题尝试了很多解决方案,但我没有得到正确的答案。我也曾尝试对此进行研究,但我仍然无法得到正确的答案。

请不要介意我的命名约定和其他代码,因为我有意更改了其中的许多代码:) 谢谢。

最佳答案

作为解决方案的替代方案,请尝试使用现有的解决方案,使用 Dapper ( https://github.com/StackExchange/dapper-dot-net )。

如果您的存储过程或查询需要它,您仍然需要使用多个参数,但这对您来说已经很好地抽象了,这肯定会减少代码量。

void SampleMethod(string name, string lastName, string database)
{
    using(var connection = new SqlConnection(MY_CONNECTION_STRING))
    {
        var resultListOfRows = connection.Query<ReturnObject>(MY_STORED_PROCEDURE, new { 
            name = name,
            lastName = lastName,
            database = database}, commandType: System.Data.CommandType.StoredProcedure);
    }
}

关于c# - 将多个 SqlParameter 传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41692000/

相关文章:

c# - 从两个通过 LINQ 连接的数据表创建组合数据表。 C#

java - 使用两种创建二维数组的方法

java - 为什么变量显示0?

mysql - 在配置数据库中使用日期参数的默认值

.net - System.Data.SqlClient.SqlParameter.IsNullable 的用途是什么?

c# - 如何生成 gridview 绑定(bind)条形码到 pdf?

c# - 如何以编程方式从图像列表创建 powerpoint

c# - XML反序列化特殊字符

java - 让 "Calling method"等待数据 "Return"

c# - SQLCommand.Parameters.Add - 如何给出十进制值大小?