2016-10-27 9 views
1

Я пытаюсь добавить несколько значений в базу данных SQL Server с помощью VB.NET.Добавить несколько значений в базу данных VB.NET SQL Server

Я включил следующие пространства имен:

Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Data.SqlServerCe 

При запуске, я объявил соединения SQL:

con.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=""G:\Program\X\Database1.mdf"";Integrated Security=True" 

Я создал форму Windows VB, который позволяет пользователю добавлять , редактировать и удалять вопросы для Бумаги Вопросов.

Когда пользователь нажимает кнопку «Сохранить вопросы», вопросы сохраняются .txt-файлом.

Это должно затем вызвать InsertQuestion подпрограммы:

con.Open() 
InsertQuestion(con) 
con.Close() 

InsertQuestion подпрограммы:

Sub InsertQuestion(ByVal con As SqlConnection) 

    Using con 

    Dim command As New SqlCommand(("INSERT INTO Table VALUES('" & Collection(0).Question & "','" & Collection(0).Answer & "','" & Collection(0).Type & "','" & Collection(0).Mark & "')'"), con)               

     command.ExecuteNonQuery() 

     con.Close() 

    End Using 

End Sub 

Это должно добавить эти данные в таблицу. Таблица имеет пять столбцов - идентификатор, вопрос, ответ, тип, знак. ID - номер вопроса, для которого задано автоматическое увеличение.

Из первого элемента массива вопрос из индекса (0) следует добавить в столбец 2 (в вопросе вопроса), ответ от индекса (0) следует добавить в столбец 3 (под ответом) ... и так вперед.

Однако, когда программа запускается, и пользователь нажимает кнопку «Сохранить вопросы», возникает ошибка:

необработанное исключение типа «System.InvalidCastException» произошло в Microsoft.VisualBasic.dll

Дополнительная информация: Оператор '&' не определен для строки "INSERT INTO QuestionTable VALUES" и введите 'RuntimeType'.

Я, таким образом, был бы очень признателен за советы относительно того, как я буду исправлять эту команду/код, чтобы включить данные в таблицу.

Кроме того, как бы я идти о добавлении дополнительных вопросов к таблице с индексом 1 и т.д ...

Большое спасибо.

+1

Я хотел бы использовать параметры для такого рода работы, однако я думаю, что проблема может лежать с завершающим апострофом в конце ') '' Там может быть больше, чем это, но это трудно без отладки. – Bugs

+0

Каким типом обладают ваши свойства «Вопрос», «Ответ», «Тип» и «Марка»? Ошибка может быть решена, если вы используете '.ToString()' после этого. @Scrub – AugustoQ

+1

Файл '.mdf', указанный вами в строке подключения, является ** надлежащим ** файлом базы данных SQL Server - ** не ** SQL Server CE-файл (это будет'.sdf') –

ответ

1

Как указано в комментариях, создание параметризованной команды может избежать ошибок в операторах SQL.

Кроме того, отвечая на ваш другой вопрос, создание сделки является способом вставки в многочисленных значения базы данных в то время:

Sub InsertQuestion(ByVal con As SqlConnection) 

Using con 

    Dim command As New SqlCommand("INSERT INTO Table VALUES(@Question, @Answer, @Type, @Mark)", con)               

    command.Parameters.Add("@Question", YourType) 
    command.Parameters.Add("@Answer", YourType) 
    command.Parameters.Add("@Type", YourType) 
    command.Parameters.Add("@Mark", YourType) 

    command.Transaction = command.Connection.BeginTransaction 

    For i = 0 To Collection.Count - 1 
     command.Parameters("@Question").Value = Collection(i).Question 
     command.Parameters("@Answer").Value = Collection(i).Answer 
     command.Parameters("@Type").Value = Collection(i).Type 
     command.Parameters("@Mark").Value = Collection(i).Mark 
     command.ExecuteNonQuery() 
    Next 

    command.Transaction.Commit() 

    con.Close() 

End Using 

End Sub 
+0

Большое спасибо @AugustoQ. Вопрос, ответ и тип - Var Char. Марк - Int. 'command.Parameters.Add ("@ Question", SqlDbType.VarChar, 150) command.Parameters.Add ("@ Answer", SqlDbType.VarChar, 150) command.Parameters.Add ("@ Type", SqlDbType .VarChar, 50) command.Parameters.Add ("@ Марка", SqlDbType.Int)» Однако ошибка происходит в 'command.ExecuteNonQuery()' – Scrub

+0

** необработанное исключение 'типа System.InvalidOperationException' произошел в System.Data.dll. Дополнительная информация: ExecuteNonQuery требует, чтобы команда имела транзакцию, когда соединение, назначенное команде, находится в ожидающей локальной транзакции. Свойство Transaction команды не было инициализировано. ** – Scrub

+0

@Scrub В моем ответе есть ошибка: используйте команду 'command.Transaction = command.Connection.BeginTransaction', а не' Dim Transaction = command.Connection.BeginTransaction', извините об этом. – AugustoQ