#c# #winforms
#c# #winforms
Вопрос:
я пытаюсь создать отдельный класс для соединения с именем Connection.cs, почему у меня возникает эта ошибка при выполнении запроса
ExecuteNonQuery requires an open and available Connection. The connection's current state is closed
что я делаю не так?
в моем классе Dal.cs
public void Insert(string f1,string f2)
{
string query;
Connection c = new Connection();
c.OpenCnn();
try {
query = "inset into ..."
cmd = new SqlCommand(query, con);
cmd.ExecuteNonQuery();
}
catch (Exception ex){
throw ex;
}
finally {
c.CloseCnn();
}
}
и в моем классе Connection.cs
public class Connection
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = new SqlConnection();
public void OpenCnn()
{
string cnnStr = ConfigurationManager.ConnectionStrings["myconnstrng"].ToString();
con = new SqlConnection(cnnStr);
con.Open();
}
public void CloseCnn()
{
con.Close();
}
}
Комментарии:
1. Вы пытались отлаживать?
2. Какую ошибку вы получаете и когда? Попробуйте отладку
3. Откуда
con
взялся метод Insert? ВConnection
классе нет ничего общедоступного.
Ответ №1:
В настоящее время поле con является private
и не может быть доступно извне Connection
класса.
Вы можете добавить свойство к своему классу подключения:
public SqlConnection Connection { get { return con; } }
Затем получите доступ к нему через ваш экземпляр:
Connection c = new Connection();
c.OpenCnn();
try
{
query = "inset into ..."
cmd = new SqlCommand(query, c.Connection);
cmd.ExecuteNonQuery();
}
Кстати, я не уверен, на что вы ссылаетесь con
в своем Insert
методе (вероятно, на локальную переменную вместо con
поля, потому что в противном случае она даже не компилировалась бы)
Комментарии:
1. спасибо, это сработало, я определял SqlConnection con = new SqlConnection(); в моем методе insert
Ответ №2:
public class Connection
{
SqlConnection con;
public SqlConnection Conn { get { return con; } }
public void OpenCnn()
{
string cnnStr = ConfigurationManager.ConnectionStrings["myconnstrng"].ToString();
con = new SqlConnection(cnnStr);
con.Open();
}
public void CloseCnn()
{
con.Close();
}
}
Метод Insert
:
Обратите внимание на SqlCommand
инициализацию и использование общедоступного свойства conn
.
public void Insert(string f1, string f2)
{
string query;
Connection c = new Connection();
c.OpenCnn();
try
{
query = "insert into ..."
SqlCommand cmd = new SqlCommand(query, c.Conn);
cmd.ExecuteNonQuery();
}
catch (Exception ex){
throw ex;
}
finally {
c.CloseCnn();
}
}