ExecuteNonQuery:尚未初始化Connection属性。 Sqlparameter数组

时间:2018-03-11 13:13:58

标签: c# asp.net stored-procedures ado.net sql-parametrized-query

我需要帮助..请告诉我在这段代码中我做了什么错,我在传递参数数组到命令时搞砸了。 我的商店程序是正确的,连接字符串也是正确的..

  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 个答案:

答案 0 :(得分:4)

您没有告诉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;
}