nar86 Ответов: 2

Executenonquery требует открытого и доступного соединения. Текущее состояние соединения-закрыто.


показывает ошибку "ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто"

я загружаю excel в код базы данных следующим образом


общественного недействительными, содержащие вредоносные элементы()
{
пробовать
{
если (объект sqlconnection.Состояние == ConnectionState.Закрытый)
{
sqlConnection = новый SqlConnection(connStr);
объект sqlconnection.Открыть();
}
}
поймать (исключение бывший)
{
}
}


общественного недействительными DAL_Insert_Farmer_Data(farmerctscode строку, строку farmersapcode, farmerseason строку,строку dateofjoinseco, governmentcode строку, строку "имя", строки
фамилия,строка фамилия, строка пол, строка дата рождения, строка место рождения, строка имя отца,строка имя матери, строка деревня, строка последний год, строка текущий год, строка farmerphoto, строка номер телефона, строка наблюдение, строка nooffarms)

пробовать
{
sqlConnection = новый SqlConnection(connStr);
содержащие вредоносные элементы();
sqlcommand объект = новый sqlcommand, который();
свойство sqlcommand.Соединение = sqlConnection;
свойство sqlcommand.Свойства commandtext = "sp_insert_farmer_upload";
свойство sqlcommand.CommandType = CommandType.Хранимая процедура;
свойство sqlcommand.Параметры.AddWithValue ("@farmerctscode", farmerctscode);
свойство sqlcommand.Параметры.AddWithValue("@farmersapcode", farmersapcode);
свойство sqlcommand.Параметры.AddWithValue ("@farmerseason", farmerseason);
свойство sqlcommand.Параметры.AddWithValue("@dateofjoinseco", dateofjoinseco);
свойство sqlcommand.Параметры.AddWithValue("@governmentcode", governmentcode);
свойство sqlcommand.Параметры.AddWithValue("@firstname", firstname);
свойство sqlcommand.Параметры.AddWithValue("@lastname", фамилия);
свойство sqlcommand.Параметры.AddWithValue("@фамилия", фамилия);
свойство sqlcommand.Параметры.AddWithValue("@gender", пол);
свойство sqlcommand.Параметры.AddWithValue("@dateofbirth", dateofbirth);
свойство sqlcommand.Параметры.AddWithValue("@birthlocation", birthlocation);
свойство sqlcommand.Параметры.AddWithValue("@fathername", fathername);
свойство sqlcommand.Параметры.AddWithValue("@mothername", mothername);
свойство sqlcommand.Параметры.AddWithValue("@village", деревня);
свойство sqlcommand.Параметры.AddWithValue("@lastyear",lastyear);
свойство sqlcommand.Параметры.AddWithValue("@currentyear",currentyear);
свойство sqlcommand.Параметры.AddWithValue ("@farmerphoto", farmerphoto);
свойство sqlcommand.Параметры.AddWithValue("@phonenumber", phonenumber);
свойство sqlcommand.Параметры.AddWithValue("@observation", наблюдение);
свойство sqlcommand.Параметры.AddWithValue("@nooffarms", nooffarms)
свойство sqlcommand.Метод executenonquery();
}
поймать (исключение бывший)
{
строка s = ex.Message.Метод toString();
}


у меня есть одна кнопка под названием upload data, я загружаю 1000 recrods, но после загрузки 100 записей показывает ошибку следующим образом

ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения-закрыто.

в чем же ошибка в моем вышеприведенном коде?

Что я уже пробовал:

показывает ошибку "ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто"

я загружаю excel в код базы данных следующим образом


общественного недействительными, содержащие вредоносные элементы()
{
пробовать
{
если (объект sqlconnection.Состояние == ConnectionState.Закрытый)
{
sqlConnection = новый SqlConnection(connStr);
объект sqlconnection.Открыть();
}
}
поймать (исключение бывший)
{
}
}


общественного недействительными DAL_Insert_Farmer_Data(farmerctscode строку, строку farmersapcode, farmerseason строку,строку dateofjoinseco, governmentcode строку, строку "имя", строки
фамилия,строка фамилия, строка пол, строка дата рождения, строка место рождения, строка имя отца,строка имя матери, строка деревня, строка последний год, строка текущий год, строка farmerphoto, строка номер телефона, строка наблюдение, строка nooffarms)

пробовать
{
sqlConnection = новый SqlConnection(connStr);
содержащие вредоносные элементы();
sqlcommand объект = новый sqlcommand, который();
свойство sqlcommand.Соединение = sqlConnection;
свойство sqlcommand.Свойства commandtext = "sp_insert_farmer_upload";
свойство sqlcommand.CommandType = CommandType.Хранимая процедура;
свойство sqlcommand.Параметры.AddWithValue ("@farmerctscode", farmerctscode);
свойство sqlcommand.Параметры.AddWithValue("@farmersapcode", farmersapcode);
свойство sqlcommand.Параметры.AddWithValue ("@farmerseason", farmerseason);
свойство sqlcommand.Параметры.AddWithValue("@dateofjoinseco", dateofjoinseco);
свойство sqlcommand.Параметры.AddWithValue("@governmentcode", governmentcode);
свойство sqlcommand.Параметры.AddWithValue("@firstname", firstname);
свойство sqlcommand.Параметры.AddWithValue("@lastname", фамилия);
свойство sqlcommand.Параметры.AddWithValue("@фамилия", фамилия);
свойство sqlcommand.Параметры.AddWithValue("@gender", пол);
свойство sqlcommand.Параметры.AddWithValue("@dateofbirth", dateofbirth);
свойство sqlcommand.Параметры.AddWithValue("@birthlocation", birthlocation);
свойство sqlcommand.Параметры.AddWithValue("@fathername", fathername);
свойство sqlcommand.Параметры.AddWithValue("@mothername", mothername);
свойство sqlcommand.Параметры.AddWithValue("@village", деревня);
свойство sqlcommand.Параметры.AddWithValue("@lastyear",lastyear);
свойство sqlcommand.Параметры.AddWithValue("@currentyear",currentyear);
свойство sqlcommand.Параметры.AddWithValue ("@farmerphoto", farmerphoto);
свойство sqlcommand.Параметры.AddWithValue("@phonenumber", phonenumber);
свойство sqlcommand.Параметры.AddWithValue("@observation", наблюдение);
свойство sqlcommand.Параметры.AddWithValue("@nooffarms", nooffarms)
свойство sqlcommand.Метод executenonquery();
}
поймать (исключение бывший)
{
строка s = ex.Message.Метод toString();
}


у меня есть одна кнопка под названием upload data, я загружаю 1000 recrods, но после загрузки 100 записей показывает ошибку следующим образом

ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения-закрыто.

в чем же ошибка в моем вышеприведенном коде?

2 Ответов

Рейтинг:
2

OriginalGriff

Вероятно потому что вы проглатываете исключение:

public void openConnection()
    {
    try
        {
        if (sqlConnection.State == ConnectionState.Closed)
            {
            sqlConnection = new SqlConnection(connStr);
            sqlConnection.Open();
            }
        }
    catch (Exception ex)
        {
        }
    }
Поэтому, если что-то случится, чтобы предотвратить открытие соединения, вы об этом не знаете.
Используйте отладчик, чтобы выполнить шаг этого метода и посмотреть на объект исключения. Это должно дать вам информацию о том, почему открытие не удалось.

И перестаньте глотать исключения! Это только усложняет твою дальнейшую жизнь...

И кстати: создание новых исключений-это хорошая идея, но вам лучше научиться закрывать их, иначе вы получите больше проблем позже ...


Рейтинг:
1

Jochen Arndt

Здесь вы создадите новый SqlConnection экземпляр, находящийся в закрытом состоянии и openConnection() затем будет создан еще один экземпляр:

sqlConnection = new SqlConnection(connStr);
openConnection();
Если вы сейчас получили исключение в openConnection() его "съедает" пустота. catch обработчик и ExecuteNonQuery() наконец жалуется на не открывшееся соединение. Если вы хотите узнать причину, сообщите об этом в catch обработчики.

Кроме того, вы никогда не закрываете соединения (они будут закрыты, когда экземпляр выйдет за пределы области действия, что, вероятно, никогда или редко происходит в вашем приложении в зависимости от области действия вашего приложения). sqlConnection переменная).

Рекомендуемый метод заключается в том, чтобы открывать соединения, когда они необходимы, и закрывать их сразу же после завершения работы. Это особенно актуально при наличии пула соединений (Подключение к SQL-сервер пула (ADO.NET) | Майкрософт документы[^]).

Чтобы избежать явного закрытия соединений, откройте их внутри using заявление:
using (SqlConnection connection = new SqlConnection(connStr))  
{  
    connection.Open();
    // Perform the operations here
    
    // Connection is closed when leaving the using block
}  
Если вы перепишете свой код с помощью описанного выше метода, он должен работать без проблем.