Ошибка в базе данных заблокирована даже после того, как я установил все команды. Я пытаюсь записать в базу данных, и он не работает в команде INSERT внизу. Раньше я работал, но по какой-то причине он начал терпеть неудачу.База данных заблокирована даже после удаления всех команд
Sub Btn_SubmitClick(sender As Object, e As EventArgs)
If MsgBox("Are you sure?",vbYesNo,"Submit?") = 7 Then
'returns to previous screen
Else
'commences insert into database
Rows = (dataGridView1.RowCount - 1)
While count < rows
'putting grid stuff into variables
DateStart = dataGridView1.Rows(Count).Cells(0).Value.ToString
DateEnd = dataGridView1.Rows(Count).Cells(2).Value.ToString 'note other way round
TimeStart = dataGridView1.Rows(Count).Cells(1).Value.ToString
TimeEnd = dataGridView1.Rows(Count).Cells(3).Value.ToString
TotalHours = dataGridView1.Rows(Count).Cells(4).Value.ToString
OccuranceNo = dataGridView1.Rows(Count).Cells(5).Value.ToString
'fetching reason ID for Storage
SQLcommand = SQLconnect.CreateCommand
SQLcommand.CommandText = "SELECT Reason_ID FROM Reasons WHERE Reason_Name = '" & dataGridView1.Rows(Count).Cells(6).Value.ToString & "'"
SQLreader = SQLcommand.ExecuteReader
ReasonID = SQLreader("Reason_ID")
SQLcommand.Dispose
'fetching site ID for storage
SQLcommand = SQLconnect.CreateCommand
SQLcommand.CommandText = "SELECT Site_ID FROM Sites WHERE Site_Name = '" & dataGridView1.Rows(Count).Cells(7).Value.ToString & "'"
SQLreader = SQLcommand.ExecuteReader
SiteID = SQLreader("Site_ID")
SQLcommand.Dispose
Oncall = dataGridView1.Rows(Count).Cells(8).Value.ToString
'increment counter
Count = Count + 1
'send to database
SQLcommand = SQLconnect.CreateCommand
SQLcommand.CommandText = "INSERT INTO Shifts (Staff_ID, Date_Shift_Start, Date_Shift_End, Time_Shift_Start, Time_Shift_End, Total_Hours, Occurance_No, Site_ID, On_Call_Req, Rate, Approved, Reason_ID) VALUES ('" & userID & "' , '" & DateStart &"' , '" & DateEnd & "' , '" & TimeStart & "' , '" & TimeEnd & "' , '" & TotalHours & "' , '" & OccuranceNo & "' , '" & SiteID & "' , '" & Oncall & "' , '"& "1" & "' , '" & "N" & "' , '" & ReasonID & "')"
SQLcommand.ExecuteNonQuery()
SQLcommand.Dispose
End While
MsgBox("Ok")
End If
End Sub
Просто попробовал это, и он возвращает ошибку при компиляции, говоря, что он не является членом команды SQL:/ –
Вы должны использовать SQL-параметры, а не строку concat для SQL. Это особенно важно при использовании SQLIte, который является беспричинным. Если у вас нет проверочных ограничений для каждого столбца, вы можете легко вытолкнуть строки в целые столбцы. если вы займете 15 минут, чтобы узнать, как использовать DataAdapter, который может быть заменен на 1 строку кода. – Plutonix
Я также предлагаю вам использовать предложения 'Using', чтобы он автоматически удалял объекты в' End Using'. Когда вы переходите к нему, оно дает заблокированное сообщение при первой вставке, все вставки, случайные ??? Не случайно также использовать другую программу для просмотра/изменения содержимого базы данных? Любая вероятность, что файл был установлен только для чтения? – topshot