我试图将总数提取到TextBox5.text但发生错误

时间:2015-05-31 08:38:56

标签: vb.net

我正在尝试将总数提取到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

1 个答案:

答案 0 :(得分:1)

如果一个或多个列名和表名拼写不正确,则会发生此错误。在您的情况下,这意味着TotalBottle_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}}方法