Я хочу передать список 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]; }

Другие вопросы по тегам