В моей главной форме я реализовал этот код ..Передача несколько 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