在我的主窗体中,我已经实现了以下代码...
我尝试做的是避免多次重复。
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()
在我的代码中,我尝试了很多解决方案,但没有得到正确的答案。我也尝试过研究这个问题,但仍然无法得到正确的答案。
请不要介意我的命名约定和其他代码,因为我有意改变了其中许多内容 :) 谢谢。
Parameters.Add
创建参数,但是你的代码明确地编写为将单个参数传递给executeStoredProc
。这有点自相矛盾。你为什么要完全避免多个参数呢? - Panagiotis Kanavosusing
而不是try/finally
是有原因的。但由于你引入了GetSqlConnection
方法,它实际上创建了一个连接并将其分配给一个命令(两个独立的任务),所以你不能使用它。你似乎也没有意识到AddWithValue
是不安全的——它很容易推断出错误的类型或大小。 - Panagiotis Kanavos