在我的主要形式,我已經實現了這個代碼..傳遞多個的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()
在我的代碼
,我已經嘗試了這個問題,讓許多解決方案,但我沒有得到正確的答案。我也試圖研究這一點,但我仍然無法得到正確的答案。
請不要介意我的命名約定和其他代碼,因爲我故意改變其中的很多:)謝謝。
爲什麼你要避免呢?你想要達到什麼目的? –
您可以使用'Parameters.Add'創建參數,但是您的代碼被明確寫入以將各個參數傳遞給'executeStoredProc'。這有點自相矛盾。爲什麼你想要避免多個參數? –
嘗試爲數據訪問創建單獨的類,其中只返回SqlDataAdapter(DataTable,DataSet)的結果。您可以使您的數據訪問層方法以這種方式參數SqlCommand,從而避免擁有多個Sql參數。你可以檢查這個問題的答案,我寫了簡單的DAL-> http://stackoverflow.com/questions/25816609/checking-user-name-or-user-email-already-exists/25817145#25817145。你可以重新使用它。同樣在目前的格式中,這個問題太廣泛了。 – mybirthname