Member 13738315 Ответов: 1

Неправильный синтаксис возле 'аргумент'. Необходимо объявить скалярную переменную "@". Ошибки VB.NET


мне нужно вставить данные из datagrid в базу данных sql server. но в моем кодировании есть ошибка:"неправильный синтаксис рядом с "nvarchar". Необходимо объявить скалярную переменную "@". в vb.error" это моя ошибка...пожалуйста, исправьте проблему....

И Белов мою кодировку показал..

Dim conn как новый SqlConnection
Dim cmd как SqlCommand
Dim sqlstring как строка
Dim paramdic как новый словарь(строки, объекта)

Коннектикут.ConnectionString = "источник данных=ATHILINGAM\SQLEXPRESS;начальный каталог=посещаемость;Интегрированная безопасность=True;"

Коннектикут.Открыть()

paramdic.Add("@[идентификатор персонала]", "value1")
paramdic.Add("@[имя сотрудника]", "value2")
sqlstring = "вставить в dbo.Attend1(field1, field2) значения ([@идентификатор персонала], @[имя сотрудника])"
cmd = New SqlCommand(sqlstring, conn)
Для каждого keyval как KeyValuePair(строки, объекта) в paramdic
cmd.параметры.AddWithValue(keyval.Ключ, keyval.Value)
Следующий
УМК.Метод executenonquery()
УМК.Располагать()
Коннектикут.Закрывать()


в чем же ошибка моего кодирования?...

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

мне нужно вставить данные из datagrid в базу данных sql server. но в моем кодировании есть ошибка:"неправильный синтаксис рядом с "nvarchar". Необходимо объявить скалярную переменную "@". в vb.error" это моя ошибка...пожалуйста, исправьте проблему....

1 Ответов

Рейтинг:
12

OriginalGriff

В SQL '@' говорит: "это имя переменной", а переменная sin SQL не может содержать пробелов.
Попробовать это:

paramdic.Add("@StaffId", "value1")
paramdic.Add("@StaffName", "value2")
sqlstring = "INSERT INTO dbo.Attend1(field1, field2) VALUES (@StaffId, @StaffName)"


Member 13738315

чем отличается мое кодирование от вашего кодирования? это то же самое, что и мое кодирование. Я не могу понять . пожалуйста, скажите мне....

Member 13738315

вы представляете пространство между именами переменных?

OriginalGriff

В SQL не может быть пробелов в именах переменных!

OriginalGriff

Чтобы что-то делать в вычислениях, вы должны обращать внимание на детали!
Ваш:
paramdic.Add("@[идентификатор персонала]", "value1")
Мой:
paramdic.Add("@StaffId", "value1")
Ваш:
paramdic.Add("@[имя сотрудника]", "value2")
Мой:
paramdic.Add("@StaffName", "value2")
Ваш:
sqlstring = "вставить в dbo.Attend1(field1, field2) значения ([@идентификатор персонала], @[имя сотрудника])"
Мой:
sqlstring = "вставить в dbo.Attend1(field1, field2) значения (@StaffId, @StaffName)"

Member 13738315

это сработало. Но я имею в виду, что "value1" - это первый столбец(StaffId) в данных DataGridview. Я работал с системой посещаемости. Итак, 1)мне нужно выбрать и отобразить из таблицы персонала в базе данных. 2) с помощью combobox я отметил present или obsent, staffName , StaffId и Present или obsent значения, хранящиеся в другой таблице, которая является Attend1. Первая проблема решена. Но вторая проблема-это словесность пополам. Потому что я представляю 'Value1' - это Staffid или первый столбец datgridview.pls направьте меня....

OriginalGriff

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

Member 13738315

Я обнаружил эту команду...но небольшая ошибка...пожалуйста, посмотрите на это,,

sqlstring = "вставить в dbo.Attend1(StaffId, StaffName) значения ('" &амп; доктор.Клеток(0).Значение &ампер; "','" &амп; доктор.Клетки(1).Значение &ампер; "')"


Ошибка: "dr" не объявлен..Как это объявить..

OriginalGriff

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

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

Стоп.
Думать.
А потом попробуйте написать его сами - вы не научитесь ничему другому...

Member 13738315

Я понял...братан