gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:20:02 26 4
gpt4 key购买 nike

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

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/

26 4 0
文章推荐: node.js - Node.js&Express-是否曾经创建Error对象并将其传递给中间件而没有先在路由内部声明?
文章推荐: jquery -