ExecuteNonQuery: свойство подключения не было инициализировано. Sqlparameter array

Мне нужна помощь.. пожалуйста, скажите мне, что я сделал неправильно в этом коде, я запутался во время передачи массива параметров в команду. моя процедура хранения правильная, строка подключения также правильная..

  internal string addmember(string name, string dob, string city, string state, string mobile, string email, string pass)
    {
        List<SqlParameter> param = new List<SqlParameter>();
        param.Add(new SqlParameter("@Mname",Convert.ToString(name)));
        param.Add(new SqlParameter("@Mdob",Convert.ToString(dob)));
        param.Add(new SqlParameter("@MemailId",Convert.ToString(email)));
        param.Add(new SqlParameter("@Mpassword", Convert.ToString(email)));
        param.Add(new SqlParameter("@McontactNo", Convert.ToString(mobile)));
        param.Add(new SqlParameter("@Mcity", Convert.ToString(city)));
        param.Add(new SqlParameter("@Mstate", Convert.ToString(state)));

        string result = Convert.ToString(executescaler(con, CommandType.StoredProcedure, "add_members", param.ToArray()));
            return result;
    }

    private string executescaler(string con, CommandType commandTyp, string procedure, SqlParameter[] sqlParameter)
    {
        string res;
        using (SqlConnection connection = new SqlConnection(con))
        {

            connection.Open();
            SqlCommand cmd = new SqlCommand(procedure, connection);
            cmd.CommandType = commandTyp;
            cmd.CommandText = procedure;
            cmd.Parameters.AddRange(sqlParameter);
            res=  cmd.ExecuteNonQuery().ToString();
        }
        return res;
    }

обычно я использую sqlhelper, поэтому никогда не нужно проходить глубоко в ado.. но теперь я страдаю из-за этого.. я не понимаю, как передать массив sqlparameter в команду

1 ответ

Решение

Вы не сказали своему SqlCommand что это должно работать с вашим SqlConnetion, Также, SqlCommand реализует IDisposable интерфейс, так что вы должны использовать его внутри using заявление:

private string executescaler(string con, CommandType commandTyp, string procedure, SqlParameter[] sqlParameter)
{
    string res;
    using (var connection = new SqlConnection(con))
    {
        using(var cmd = new SqlCommand(procedure, con))
        {
            cmd.CommandType = commandTyp;
            cmd.Parameters.AddRange(sqlParameter);
            connection.Open();
            res = cmd.ExecuteNonQuery().ToString();
        }
    }
    return res;
}
Другие вопросы по тегам