Я пытаюсь выполнить параметры Переходим к SQL INSERT заявление через VB.NET:Передача параметров в SQLCommandText
Using cnn As SqlConnection = New SqlConnection(conn)
cnn.Open()
Using insertTrans As SqlTransaction = cnn.BeginTransaction
Using cmd As SqlCommand = cnn.CreateCommand()
'skip 1st row
Dim firstRow As Boolean = True
For Each item As String In lines
cmd.CommandText = "INSERT INTO [matrixtest].[dbo].[SM_Fatca_GinList] VALUES (@gin, @name, @country)"
If Not firstRow Then
item = item.Replace(""" ,", """,")
item = item.Replace(", """, ",""")
item = item.Replace(""",""", """__||__""")
item = item.Replace("""", "")
fields = item.Split("__||__")
If Not String.IsNullOrEmpty(fields(0)) Then
If Not fields(0).Length = 0 Then
cmd.Parameters.AddWithValue("@gin", fields(0))
cmd.Parameters.AddWithValue("@name", fields(1))
cmd.Parameters.AddWithValue("@country", fields(2))
End If
End If
End If
firstRow = False
cmd.Transaction = insertTrans
cmd.ExecuteNonQuery()
Next
End Using
End Using
End Using
я получаю эту ошибку: Must declare the scalar variable "@gin".
Это выглядит как ошибка SQL, но почему я должен объявить переменные в SQL, не я просто использую этот синтаксис для передачи параметров? Что я делаю неправильно и как это исправить?
Вы условно добавляете параметры. Вы должны добавлять параметры всякий раз, когда задан текст команды. – Sunil
Если в таблице DB имеется более 3 столбцов, вы должны указать их в SQL. В противном случае он действительно не знает, как их сопоставить. Главное, что вы делаете addwithvalue в цикле, поэтому каждый раз добавляется еще один параметр @gin, а другой и другой .... Создайте 3 параметра один раз, а затем просто установите/сбросьте значение при повторении. Также, если 'lines 'все еще является списком,' Lines.RemoveAt (0) 'будет удалять заголовок вместо этого bool – Plutonix
@Plutonix Как вы создаете параметры без их настройки? –