Для ExecuteNonQuery требуется открытое и доступное соединение.Текущее состояние соединения закрыто - PullRequest
0 голосов
/ 26 августа 2011

Мой код:

public bool Insertcustomer()
{
    try
    {
        SqlCommand cmd = new SqlCommand("Insertcustomermaster", dal.con);
        cmd.Parameters.Add("@customercode", SqlDbType.Int).Value = customercode;
        cmd.Parameters.Add("@customername", SqlDbType.NChar).Value = customername;
        cmd.Parameters.Add("@address1", SqlDbType.NChar).Value = address1;
        cmd.Parameters.Add("@address2", SqlDbType.NChar).Value = address1;
        cmd.Parameters.Add("@phoneno", SqlDbType.Int).Value = phoneno;
        cmd.Parameters.Add("@mobileno", SqlDbType.Int).Value = mobileno;
        cmd.Parameters.Add("@mailid", SqlDbType.NChar).Value = mailid;
        cmd.Parameters.Add("@website", SqlDbType.NChar).Value = website;
        cmd.Parameters.Add("@occupation", SqlDbType.NChar).Value = occupation;
        cmd.Parameters.Add("@status", SqlDbType.Bit).Value = status;


        cmd.CommandType = CommandType.StoredProcedure;
        return Convert.ToBoolean(cmd.ExecuteNonQuery());  //Error
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

Конфигурация приложения:

я новичок в c # .net .. я не могу найти эту ошибку .. всем помочь ..

Ответы [ 5 ]

3 голосов
/ 26 августа 2011

Вы должны открыть соединение и закрыть его.

string connectionString = "";
SqlConnection con = new SqlConnection(connectionString);
con.Open();

//do your coding 
con.Close();
1 голос
/ 26 августа 2011

Из вашего кода вам нужно открыть соединение, указанное в объявлении SqlCommand (dal.con)

Вы должны открыть его с помощью

dal.con.Open()

перед выполнением ExecuteNonQuery, но не забудьте закрытьпосле (dal.con.Close()).

Я бы предложил изменить

return Convert.ToBoolean(cmd.ExecuteNonQuery());

на

dal.con.Open();
bool result = Convert.ToBoolean(cmd.ExecuteNonQuery());
dal.con.Close();
return result;
1 голос
/ 26 августа 2011

Сообщение об ошибке говорит, что не так.Соединение не открыто, но закрыто.

Убедитесь, что соединение открыто.Используйте Open() -метод для открытия соединения.

Кстати, избавьтесь от блока try / catchКакой смысл ловить исключение и бросать его снова?

0 голосов
/ 25 марта 2013

Не могли бы вы опубликовать дополнительную информацию о строке подключения?

Попробуйте это в Webconfig:

<connectionStrings>
    <add name="connName" connectionString="//ConnectionString here"/>
</connectionStrings>

В классе:

public static SqlConnection GetConnection()
{
    string conString = ConfigurationManager.ConnectionStrings["connName"].ConnectionString;
    SqlConnection con = new SqlConnection(conString);
    return con;
}

И вместо этого:

SqlCommand cmd = new SqlCommand("Insertcustomermaster", dal.con);
        cmd.Parameters.Add("@customercode", SqlDbType.Int).Value = customercode;
        cmd.Parameters.Add("@customername", SqlDbType.NChar).Value = customername;
        cmd.Parameters.Add("@address1", SqlDbType.NChar).Value = address1;
        cmd.Parameters.Add("@address2", SqlDbType.NChar).Value = address1;
        cmd.Parameters.Add("@phoneno", SqlDbType.Int).Value = phoneno;
        cmd.Parameters.Add("@mobileno", SqlDbType.Int).Value = mobileno;
        cmd.Parameters.Add("@mailid", SqlDbType.NChar).Value = mailid;
        cmd.Parameters.Add("@website", SqlDbType.NChar).Value = website;
        cmd.Parameters.Add("@occupation", SqlDbType.NChar).Value = occupation;
        cmd.Parameters.Add("@status", SqlDbType.Bit).Value = status;


        cmd.CommandType = CommandType.StoredProcedure;
        return Convert.ToBoolean(cmd.ExecuteNonQuery());  //Error
    }
    catch (Exception ex)
    {
        throw ex;
    }

Сделайте это:

//Method + Insert string (Guessing you want to create a register page)
    try
    {
        SqlCommand cmd = new SqlCommand(sql, GetConnection());
    //You don't have to point out the data type if it's just going to be filled in like that.
        cmd.Parameters.AddWithValue("@customercode", customercode);
        cmd.Parameters.AddWithValue("@customername", customername);
        cmd.Parameters.AddWithValue("@address1", address1);
        cmd.Parameters.AddWithValue("@address2", address2);
        cmd.Parameters.AddWithValue("@phoneno", phoneno);
        cmd.Parameters.AddWithValue("@mobileno", mobileno);
        cmd.Parameters.AddWithValue("@mailid", mailid);
        cmd.Parameters.AddWithValue("@website", website);
        cmd.Parameters.AddWithValue("@occupation", occupation);
        cmd.Parameters.AddWithValue("@status", status);
        cmd.ExecuteNonQuery();
    }
        catch (System.Data.SqlClient.SqlException ex)
        {
            // You can catch it with an error, or Just leave it empty
            string msg = "Error";
            msg += ex.Message;
            throw new Exception(msg);
        }
        //Close the connection (Not Necessary)
        GetConnection().Close();
    }
0 голосов
/ 26 августа 2011

dal.con не был установлен или открыт или что-то еще. Согласно сообщению об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...