Database “;不允许更改';连接字符串';房地产”;错误
当我向access数据库添加数据时,出现错误:Database “;不允许更改';连接字符串';房地产”;错误,database,vb.net,ms-access,Database,Vb.net,Ms Access,当我向access数据库添加数据时,出现错误: Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click TB2.Clear() NameofG.Clear() NunberofG.Clear() UnitofG.Clear() End Sub Private Sub Button1_Click(sender As Object, e As EventArg
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
TB2.Clear()
NameofG.Clear()
NunberofG.Clear()
UnitofG.Clear()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
pro = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Piyawat\Desktop\PPCC\Stock.accdb;"
connstring = pro
myconnection.ConnectionString = connstring
If myconnection.State = ConnectionState.Closed Then
myconnection.Open()
End If
command = "insert into Stock([InvoiceID],[Type],[Item],[Amout],[Unit]) Value ('" & TB2.Text & "','" & CB1.Text & "','" & NameofG.Text & "','" & NunberofG.Text & "','" & UnitofG.Text & "')"
Dim cmd As OleDbCommand = New OleDbCommand(command, myconnection)
cmd.Parameters.Add(New OleDbParameter("InvoiceID", CType(TB2.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Type", CType(CB1.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Item", CType(NameofG.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Amout", CType(NunberofG.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Unit", CType(UnitofG.Text, String)))
MsgBox("Record Save")
Try
cmd.ExecuteNonQuery()
cmd.Dispose()
TB2.Clear()
CB1.Text.DefaultIfEmpty
NameofG.Clear()
NunberofG.Clear()
UnitofG.Clear()
Catch ex As Exception
MsgBox("Mistake")
End Try
End Sub
如何修复错误?请帮忙。谢谢我会确保在您使用连接后,您会关闭它 但是,您可以让.net自动为您执行此操作 另外,进入project->settings并在那里添加连接字符串-这样您就不必在代码中放置或拥有连接字符串了-(坏主意) 因此,您的代码应该如下所示:
Dim strSQL As String = "INSERT INTO Stock([InvoiceID],[Type],[Item],[Amout],[Unit]) " &
"VALUES (@TB2, @CB1, @NameofG, @NunberofG, @UnitofG)"
Using cmd As New OleDbCommand(strSQL, New OleDbConnection(My.Settings.Test44))
cmd.Parameters.Add("@TB2", OleDbType.VarWChar).Value = TB2.Text
cmd.Parameters.Add("@CB1", OleDbType.VarWChar).Value = CB1.Text
cmd.Parameters.Add("NameofG", OleDbType.VarWChar).Value = NameofG.Text
cmd.Parameters.Add("@NumberofG", OleDbType.Integer).Value = NunberofG.Text
cmd.Parameters.Add("@UnitofG", OleDbType.Integer).Value = UnitOfG.Text
cmd.Connection.Open()
Try
cmd.ExecuteNonQuery()
MsgBox("Record Save")
Catch ex As Exception
MsgBox("Error = " & ex.Message)
End Try
End Using
注意以下几点:
没有凌乱的弦乐炫耀
字符串没有乱引号,数字没有引号
干净易读
使用保温材料-安全
有了使用块,我们不必处理或关闭连接,这对您来说是自动的。所以总是假设它是关闭的
请注意,我们没有一个单独的conneciton对象-不需要
请注意,command对象非常好。
命令对象具有:
a connection object - you don't need to create a new one
command text
a reader!!! - you can use command object - no need to load + create a reader
我将数据库代码移动到一个单独的方法 从用户界面代码开始,首先要验证输入。我不得不猜测数据类型,因为您的代码使它们看起来都像字符串。我希望这不是真的 看来你把参数搞混了。我很高兴您尝试使用它们,但它们没有出现在您的sql字符串中,因此它们没有被使用。您不希望将字符串与用户输入连接在一起,因为这有sql注入的风险 参数名称前面的@符号只是一种便于识别的约定 您需要将数据库对象保持在使用它们的方法的本地。这样,他们可以关闭和处置使用…结束使用块尽快
Private ConStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Piyawat\Desktop\PPCC\Stock.accdb;" '"Your connection string"
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Validate input
Dim ID As Integer
Dim Amt As Decimal
Dim Unt As Integer
Dim message = "Please enter a number for the"
If Not Integer.TryParse(TB2.Text, ID) Then
MessageBox.Show(message & " Invoice ID.")
Return
End If
If Not Decimal.TryParse(NunberofG.Text, Amt) Then
MessageBox.Show(message & " Amount.")
Return
End If
If Not Integer.TryParse(UnitofG.Text, Unt) Then
MessageBox.Show(message & " Unit")
Return
End If
'Call the insert method
Try
InsertInvoice(ID, CB1.Text, NameofG.Text, Amt, )
Catch ex As Exception
MsgBox(ex.Message)
Return
End Try
MessageBox.Show("Record Saved")
TB2.Clear()
CB1.Text.DefaultIfEmpty
NameofG.Clear()
NunberofG.Clear()
UnitofG.Clear()
End Sub
Private Sub InsertInvoice(InvoiceID As Integer, Type As String, Item As String, Amount As Decimal, Unit As Integer)
Dim Command = "insert into Stock([InvoiceID],[Type],[Item],[Amout],[Unit]) Value (@InvoiceID,@Type,@Item,@Amount,@Unit)"
Using myconnection As New OleDbConnection(ConStr),
cmd As New OleDbCommand(Command, myconnection)
With cmd.Parameters
.Add("@InvoiceID", OleDbType.Integer).Value = InvoiceID
.Add("@Type", OleDbType.VarChar).Value = Type
.Add("@Item", OleDbType.VarChar).Value = Item
.Add("@Amout", OleDbType.Decimal).Value = Amount
.Add("@Unit", OleDbType.Integer).Value = Unit
End With
End Using
End Sub
从外观上看,
myconnection.ConnectionString
可能在您尝试将其设置为connstring
时处于打开状态?有什么事情很难理解,以至于您的连接已经打开了?因此,请删除此项:myconnection.ConnectionString=connstring
,因为这是要设置为一次的,而不是每次您必须使用命令时都设置为一次。还要尝试打开一次连接(因为我们看到连接变量myconnection
在其他地方被初始化),这是否回答了您的问题?您的SQL语法和参数都是错误的-它们无法工作。请参阅下面的代码。参数意味着您不必在sql字符串中分配文本框值,也不需要所有的引号、单引号等。请参见下文。