在我的主窗体中,我已经实现了这段代码..
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/