kantagrawal Ответов: 3

Я хочу вставить нулевое значение в базу данных, если эта переменная пуста, но в командной строке она вставляет пустое значение вместо null. Так что дайте ошибку.


Я хочу вставить нулевое значение в базу данных, если эта переменная пуста, но в командной строке она вставляет пустое значение вместо null. так что дайте ошибку "
Incorrect syntax near ','

". я публикую свой код с командной строкой и сообщением об ошибке в следующем. заранее спасибо.

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

for (int i = 0; i < datProjectCostDetail.Rows.Граф; i++)
{
инт? PageSizeID;
двойной? RatePerPage;
инт? TotalPage;
если (datProjectCostDetail.Строки[Я][6].Метод toString() == "")
{PageSizeID = null; }
ещё
{PageSizeID = (int) datProjectCostDetail. Rows[i][6]; }

если (datProjectCostDetail.Строки[я][9].Метод toString() == "")
{ RatePerPage = null; }
ещё
{ RatePerPage = (double) datProjectCostDetail. Rows[i][9]; }

если (datProjectCostDetail.Строки[Я][10].Метод toString() == "")
{ TotalPage = null; }
ещё
{ TotalPage = (int) datProjectCostDetail. Rows[i][10]; }

cmd = new SqlCommand("Insert into TblProjectCostDetail values(" + ProjectID + ", " + datProjectCostDetail.Rows[i][0] + ", '" + datProjectCostDetail.Rows[i][2].ToString() + "', " + datProjectCostDetail.Rows[i][3] + ", '" + datProjectCostDetail.Rows[i][5].ToString() + "', " + PageSizeID + ", '" + datProjectCostDetail.Rows[i][8].ToString() + "', " + RatePerPage + ", " + TotalPage + ", '" + datProjectCostDetail.Rows[i][11].ToString() + "', " + datProjectCostDetail.Rows[i][12] + " )", con, trans);
               cmd.ExecuteNonQuery();




Вывод командного запроса
Вставить в tblprojectcostdetail значения (1, 1, '09 / Sep / 2016', 1, 'Miscellaneous Payment', , ",,, 'Discount', 600 )

3 Ответов

Рейтинг:
21

Karthik_Mahalingam

Не объединяйте операторы sql, это приведет к SQL-инъекция[^] атаки
всегда использовать Параметризованные запросы для предотвращения атак SQL-инъекций в SQL Server[^]
сделав это, вы упростите свой SQL-оператор и не будете беспокоиться о форматах типов данных

попробуй вот так

cmd = new SqlCommand("Insert into TblProjectCostDetail values(@col1,@col2,@col3,...colN)", con, trans);
         cmd.Parameters.Add("@col1", ProjectID);
         cmd.Parameters.Add("@col2", datProjectCostDetail.Rows[i][0]);
         cmd.Parameters.Add("@col3",datProjectCostDetail.Rows[i][2]);
         .
         .
         .
         cmd.Parameters.Add("@colN", datProjectCostDetail.Rows[i][12].ToString());
         cmd.ExecuteNonQuery();



используйте это вставить null значения, когда это так String.Empty
string value = string.IsNullOrWhiteSpace(datProjectCostDetail.Rows[i][0].ToString()) ? null : datProjectCostDetail.Rows[i][0].ToString();


Рейтинг:
18

OriginalGriff

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


Рейтинг:
1

lavikgupta

Проходить Дбнулл.Значение к базе данных, если строка пуста. Вы можете просто проверить это по строке.IsNullOrWhiteSpace