我正在尝试将总数提取到TextBox5.text但是发生了错误,例如没有给出一个或多个必需参数的值。
尝试 con.Close()
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Pradnya_DataB.mdb"
con.Open()
ss = "Select total from stock_bottle WHERE Bottle_type=" & Convert.ToString(TextBox3.Text.ToString())
cmd = New OleDbCommand(ss, con)
rd = cmd.ExecuteReader()
If rd.Read() Then
TextBox5.Text = rd("total").ToString()
End If
con.Close()
rd.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
答案 0 :(得分:1)
如果一个或多个列名和表名拼写不正确,则会发生此错误。在您的情况下,这意味着Total
或Bottle_type
甚至Stock_Bottle
不是您的字段或表格的正确名称。
说出来,并等待对您的查询进行适当的更正,我建议您使用更强大的代码,如此
Try
Dim ss = "Select total from stock_bottle WHERE Bottle_type=@btype"
Using con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Pradnya_DataB.mdb")
Using cmd = new OleDbCommand(ss, con)
con.Open()
cmd.Parameters.Add("@btype", OleDbType.Int32).Value = TextBox3.Text
Dim result = cmd.ExecuteScalar()
If result IsNot Nothing Then
TextBox5.Text = result.ToString()
End If
End Using
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
这里我已将您的查询更改为参数化查询。 It is more safe并且对于用于where子句的DataType的正确解释具有很强的可靠性。 我还删除了连接的全局变量。 (您没有任何优势,您需要不断检查该连接的状态。) 我添加了Using statement以确保正确关闭连接并立即释放连接保留的系统资源。
最后,如果您只需要使用一个列检索一行,则不要使用更昂贵的OleDbDataReader
(当有许多行和列要回读时很有用),但直接使用OleDbCommand及其{{ 3}}方法