【问题标题】:Read and Write SQL information from VB.Net从 VB.Net 读取和写入 SQL 信息
【发布时间】:2015-07-27 08:04:28
【问题描述】:

我有一个将我的 vb.net 项目链接到一个唯一的 SQL 数据库,该数据库包含一个预定义的电子邮件地址列表。我的 vb 表单包含一个“名字”、“姓氏”和“电子邮件”文本框。

如何编程 vb.net 以在数据库中的“电子邮件”文本框中定位文本,并将 firstname 和 lastname 文本框值添加到与定位的电子邮件字段相同的行中的相应列中? (填补空白)

到目前为止我的代码:

' Initiate SQL Connection for db4free.net on port: 3306
    MySqlConnection = New MySqlConnection
    MySqlConnection.ConnectionString = "server=db4free.net; Port=3306; user id=username; password=password; database=databasename"
    Try
        MySqlConnection.Open()
    Catch ex As Exception
        MsgBox("The server could not be reached, check that you have internet connectivity and try again.", MsgBoxStyle.Critical, "Connection Error")
    End Try

        --- SQL DATABASE CONNECTION --- '
        Dim Myadaptor As New MySqlDataAdapter
        Dim sqlquery = "SELECT * FROM registration WHERE email='" & emailTextBox.Text & "';"
        Dim command As New MySqlCommand
        command.Connection = MySqlConnection
        command.CommandText = sqlquery
        Myadaptor.SelectCommand = command
        Dim Mydata As MySqlDataReader
        Mydata = command.ExecuteReader

        ' SQL Entry Validation
        If Mydata.HasRows = 0 Then
            MsgBox("Please enter a valid E-Mail address", MsgBoxStyle.Critical, "Invalid Details")
        Else
           --- THE ANSWER TO MY QUESTION (write firstname and lastname into row based on email) ---

提前谢谢你,(我才刚开始学习 SQL)。

【问题讨论】:

  • 那么您想用新的名字和姓氏值更新数据库吗?
  • 正如您刚刚开始学习 - 不要将字符串组合在一起,学习使用客户端传递的值的参数以避免 SQL 注入漏洞。跨度>
  • @DanielWaghorn 是的,我想在“电子邮件”文本框中输入一个电子邮件地址,然后在其他两个文本框中输入一些随机的名字和姓氏,最后单击一个在数据库中搜索该电子邮件的按钮,然后将文本框值添加到 firstname 和 lastname 列中找到的电子邮件地址所在的同一行。

标签: mysql sql database vb.net


【解决方案1】:

你会想做这样的事情:

If Mydata.HasRows = 0 Then
    MsgBox("Please enter a valid E-Mail address", MsgBoxStyle.Critical, "Invalid Details")
    Mydata.Close()
Else
    Mydata.Close()
    Dim command As New MySqlCommand
    command.Connection = MySqlConnection
    command.ConnectionText = "UPDATE `registration` SET `firstname` = @firstname,`lastname` = @lastname WHERE `email` = @email"
    command.Prepare()
    command.Parameters.AddWithValue("@firstname", firstnameTextBox.Text)
    command.Parameters.AddWithValue("@lastname", lastnameTextBox.Text)
    command.Parameters.AddWithValue("@email", emailTextBox.Text)
    command.ExecuteNonQuery()
End If

您可能需要调整 SQL 或对 UI 元素的引用以匹配您的设置。

我还将参数绑定到 SQL 中,而不是通过连接参数来创建字符串,以防止SQL Injection

【讨论】:

  • 异常:'已经有一个打开的 DataReader 与此连接关联,必须先关闭。'你的代码在什么时候将名字和姓氏添加到与电子邮件地址相同的行(以填补空白),据我所知,它只是将其添加到新行,不是吗?
  • Mydata = command.ExecuteReader之后添加一行Mydata.Close()
  • Mydata.Close() 最初位于 if 语句下方,将其向上移动到 command.ExcecuteReader 将意味着 if 语句将不起作用(如果 Mydata.HasRows = 0)......并且请阅读我之前评论的扩展名。
  • 抱歉,我已经更新了 SQL,并且还把 close 语句放在了它应该工作的地方。
  • 'command.ExecuteNonQuery()' 上的代码中断,错误消息:“命令执行期间遇到致命错误”。我用代码尝试了一些不同的东西,但消息总是相同的,“MySql.Data.dll 中出现未处理的异常”,然后返回上面的错误。请帮忙,我不知道这里出了什么问题......
猜你喜欢
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多