Member 13174737 Ответов: 2

Как я могу вставить общий текст в базу данных SQL с помощью VB.NET


У меня есть таблица данных, я хочу вставить какой-то общий текст в столбец таблицы данных, так как я не хочу, чтобы он получал NULL.

Для этого столбца у меня нет никакого текстового поля или метки в форме окна.
Можно ли вставить какой-либо текст???
если да, пожалуйста, посоветуйте, как я могу это сделать ??

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

Cmd.CommandText = "Insert Into StaffLdgr (EntryDate, StaffName, RefNo, TransactionType, Currency, CrAmt, ExRate) Values('" & Dtpcashdb.Text & ",'" & Tbdbkname.Text & "','" & "DGL/CASH-0000" & "','" & "Credit" & "', '" & "INR" & "','" & Tbamtcashdb.Text & "','" & "1.00" & "')"

[no name]

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

Richard MacCutchan

В вашем SQL все еще так много неправильного, что кажется пустой тратой времени беспокоиться о нулевых значениях.

2 Ответов

Рейтинг:
2

Patrice T

Никогда не создавайте SQL-запрос путем конкатенации с пользовательскими вводами, он называется "SQL-инъекция", он опасен для вашей базы данных и подвержен ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользовательский ввод типа "Брайан О'Коннер" может привести к сбою вашего приложения, то это уязвимость SQL-инъекции.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]


Рейтинг:
1

CHill60

Вот пример

cmd.CommandText = "Insert Into StaffLdgr (EntryDate, StaffName, RefNo, TransactionType, Currency, CrAmt, ExRate) Values(@Dtpcashdb,@Tbdbkname,'DGL/CASH-0000','Credit', 'INR',@Tbamtcashdb,1.00)"
cmd.Parameters.AddWithValue("@dtpcashdb", Dtpcashdb.Text)
cmd.Parameters.AddWithValue("@Tbdbkname", Tbdbkname.Text)
cmd.Parameters.AddWithValue("@Tbamtcashdb", Tbamtcashdb.Text)

Что нужно отметить:
1. "общий текст", как вы его называете...
Колонка refno получается "общий текст" 'DGL/CAH-000'
Колонка TransactionType это получение" общего текста ""кредита"
Колонка Currency становится "общий текст" 'МНО'

2. Вы пытаетесь ввести столбец ExRate как переменная строкового типа. Это должен быть числовой тип столбца (decimal, double, float). Измените свою базу данных на правильный тип столбца.

3. мое решение, как и все другие решения, которые вы видели здесь, использует параметризованный запрос Это не только помогает предотвратить SQL-инъекцию, но и помогает преодолеть проблемы с типами данных и несоответствующими одинарными кавычками. Так что используйте параметризованные запросы в будущем! Я не могу достаточно подчеркнуть, насколько важно, чтобы вы приняли к сведению этот совет (я не единственный, кто сказал это)

4. я избавился от ненужной конкатенации строк в таких местах, как
& "','" & "DGL/CASH-0000" & "','" & "Credit" & "', '" & "INR" & "',"
Это в точности то же самое, что
& "','DGL/CASH-0000','Credit','INR',"
который короче и легче читать. Если вы думаете о замене жестко закодированных значений переменными, то это просто становится
& "',@RefNo,@TranType,@Currency,"