Sankar Prosad Roy Ответов: 1

Я хочу вставить данные, если одно поле не является нулевым


Вот мой код, в котором я хочу вставить данные в базу данных, если "testheader" не равен null.

и я получаю ошибку

"
ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.

"
когда я попробовал это сделать без какой-либо проверки, то данные были вставлены успешно.

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

код c#....

InsertCustomizeRowtwo общественная bool(строка Бе,струнный отдел, testcode строку,строку testname реальным,testheader строку,строку sub1,sub2 строку,строку sub3,sub4 строку,строку sub5,sub6 строку,строку sub7,sub8 строку, строку sub9,строки sub10)

{
если (testheader == "")
testheader = нуль;
пробовать
{
//соединение
theConnection = новый SqlConnection();
если (conString != "")
{
связь.ConnectionString = conString;
связь.Открыть();

}
//команда
theCommand = новая команда SqlCommand();
командир.Подключение = подключение;
if (testheader != null)
{
командир.CommandText = " вставить в PH_TestMaster_CustRowtwo(COMPCODE,DEPARTMENT,TESTCODE,TESTNAME,TEST_HEADER,TEST_SUB1,TEST_SUB2,TEST_SUB3,TEST_SUB4,TEST_SUB5,TEST_SUB6,TEST_SUB7,TEST_SUB8,TEST_SUB9,TEST_SUB10) значения('" + cocode+", '" + dept+", '" + testcode+", '" + testname+", '" + testheader+", '" + sub1+", '" + sub2+", '" + sub3+", '" + sub4+", '" + sub5+", '" + sub6+", '" + sub7+", '" + sub8+", '" + SUB9+"', '" + sub10+"')";

}
ещё
{
связь.Располагать();
командир.Располагать();
}
командир.CommandType = CommandType. Text;
командир.Метод executenonquery();
вернуть true;


}
ловить
{
возвращать false;
}
наконец
{
связь.Располагать();
командир.Располагать();

}


}

Karthik_Mahalingam

убедитесь, что сужение не пустое

1 Ответов

Рейтинг:
5

OriginalGriff

Посмотрите на свой код (я вырву все ненужное):

if (testheader != null)
    {
    ...
    }
else
    {
    theConnection.Dispose();
    theCommand.Dispose();
    }
theCommand.CommandType = CommandType.Text;
theCommand.ExecuteNonQuery();
Поэтому, когда testheader равен null, вы избавляетесь от объекта а потом сразу же попробуй им воспользоваться.
Это не сработает, никогда. И когда вы пытаетесь это сделать, это все равно, что погрузить свою машину в машину для дробления автомобилей, а затем попытаться отвезти ее в магазины. Не работает.

И серьезно, никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Вы можете обнаружить, что вся ваша проблема исчезает, если вы используете параметризованные запросы и сбрасываете проверку testheader null.