Я хочу передать список SqlParameter функции, которая выполняет хранимую процедуру в C#
Я хочу сохранить два значения, скажем @name
а также @pwd
к таблице, для этого я могу использовать следующий код на странице aspx.
public void save1()
{
try
{
using (SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionStrings["myCon"].ConnectionString))
{
using(SqlCommand cmd = new SqlCommand("SP_TEST",con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name", txtUname.Text);
cmd.Parameters.Add("@pwd", txtPwd.Text);
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{ }
}
Но я хочу передать эти две переменные как единый List<SqlParameter>
переменная как
List<SqlParameter> param = new List<SqlParameter>();
param.Add(new SqlParameter("@name", uname));
param.Add(new SqlParameter("@pwd", pwd));
Таким образом, объявление вышеуказанной функции меняется с
public void save1()
в
public void save1(List<SqlParameter> param)
Но моя проблема в том, что я не знаю, как извлечь эти две переменные из этого param
а затем добавить их в cmd
переменная. Мне нужна ваша помощь.
4 ответа
Пусть ваша функция Save выглядит так:
public void Save1(List<SqlParameter> param)
{
try
{
using (SqlConnection con = new SqlConnection(ConfigurationManager
.ConnectionStrings["myCon"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("SP_TEST", con))
{
cmd.CommandType = CommandType.StoredProcedure;
foreach (var item in param)
cmd.Parameters.Add(item);
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
/*...*/
}
}
Тогда param будет доступен для вызывающей подпрограммы, а также для функции Save1(..), например:
public/*private*/ List<SqlParameter> param = new List<SqlParameter>();
Наконец, ваша подпрограмма вызова будет вызывать Save1(..) следующим образом:
string uname = "...";
string pwd = "...";
param.Add(new SqlParameter("@name", uname));
param.Add(new SqlParameter("@pwd", pwd));
Save1(param);
Если вы знаете, что будет только два параметра, вы можете использовать это
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(param[0]);
cmd.Parameters.Add(param[1]);
cmd.ExecuteNonQuery();
См. ниже код
List<SqlParameter> Parameters = new List<SqlParameter>(){
new SqlParameter() {ParameterName = "@yourparamname", SqlDbType = SqlDbType.NVarChar, Value= ""}
,..
};
public void ExecuteSQL(string SP, List<SqlParameter> Parameters){
SqlConnection CN = new SqlConnection("ConnectionString");SqlCommand CM = new SqlCommand(SP, CN);CM.CommandType = CommandType.StoredProcedure;
CM.Parameters.AddRange(Parameters.ToArray());CM.ExecuteNonQuery();CM.Conection.Dispose();
}
ExecuteSQL("dbo.[SP_Name]", Parameters);
Ключ:CM.Parameters.AddRange(Parameters.ToArray());
Вы можете использовать цикл for для доступа к каждому отдельному параметру в списке.
for (интересно i=0, i<параметр. Количество, i ++) {// var param1 = param [i]; }