sql - 在vb中从数据库中选择数据并将数据输出到标签中

标签 sql vb.net error-handling

我有以下代码,该代码从数据库中选择数据并向表单上的标签输出值:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click


        Dim strConn As String = System.Configuration.ConfigurationManager.ConnectionStrings("yourConnectionString").ToString()
        Dim sql As String = "SELECT aid FROM tbl_RAPA WHERE username=@username"
         Dim conn As New Data.SqlClient.SqlConnection(strConn)
        Dim objDR As Data.SqlClient.SqlDataReader
        Dim Cmd As New Data.SqlClient.SqlCommand(sql, conn)


        Cmd.Parameters.AddWithValue("@username", User.Identity.Name)
        conn.Open()
        objDR = Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
        While objDR.Read()
            Label1.Text = objDR("aid")
        End While
    End Sub

但是,如果数据库中的值为空,则程序将运行错误。我有办法做到这一点,所以程序只返回一个空值而不崩溃吗?

我收到的错误消息是System.InvalidCastException: 'Unable to cast object of type 'System.DBNull' to type 'System.Windows.Forms.Label'.'行上的Label1.Text = objDR("aid")

最佳答案

数据库对象通常需要关闭和处置。即使出现错误,Using...End Using块也会为您执行此操作。

由于您只需要一个数据,因此可以使用.ExecuteScalar,它提供了结果集第一行的第一列。此方法返回一个对象。

尝试始终将.Add方法与Parameters一起使用。参见http://www.dbdelta.com/addwithvalue-is-evil/

https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
还有一个:
https://dba.stackexchange.com/questions/195937/addwithvalue-performance-and-plan-cache-implications
这是另一个
https://andrevdm.blogspot.com/2010/12/parameterised-queriesdont-use.html
我不得不猜测数据库类型,因此,请检查您的数据库的真实值。

在关闭并断开连接之前,请勿更新用户界面。 (End Using)。我在Using块之前声明了aid,因此可以在该块之后使用。在将对象aid添加到标签的Text之前,检查其是否为Nothing。

Imports MySql.Data.MySqlClient

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim aid As Object
    Using conn As New MySqlConnection(ConfigurationManager.ConnectionStrings("yourConnectionString").ToString),
            cmd As New MySqlCommand("SELECT aid FROM tbl_RAPA WHERE username=@username", conn)
        cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = User.Identity.Name
        aid = cmd.ExecuteScalar
        conn.Open()
    End Using
    If Not IsNothing(aid) Then
        Label1.Text = aid.ToString
    End If
End Sub

关于sql - 在vb中从数据库中选择数据并将数据输出到标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60030950/

相关文章:

php - 显示这些日期之间的所有数据

sql - Postgres 多对多关系 : finding rows all having relation to a set of rows from related table

sql - 正确使用 GROUP BY

perl - 使用 Perl Tkx 进行错误处理

php - MySQL 如何连接两个不同数据库中的两个表?

.net - VB.NET:TAB 的标识符?

vb.net - 删除字符串中的所有空格

vb.net - 当表单有滚动条时,控件位置是否相对于表单的可见区域?

r - 自动尝试优化其他初始值

c++ - iOS didFailToConnectPeripheral : with error Code=0 "Unknown error."