我正在运行以下代码(部分代码)来连接到 PHPmyadmin
DB
Private Sub sreg_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
SqlConnection.ConnectionString = ServerString
Try
If SqlConnection.State = ConnectionState.Closed Then
SqlConnection.Open()
MsgBox("Successfully connected to MySQL DB")
Else
SqlConnection.Close()
MsgBox("Connection is Closed")
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Public Sub SaveNames(ByRef SQLStatment As String)
Dim cmd As MySqlCommand = New MySqlCommand
With cmd
.CommandText = SQLStatment
.CommandType = CommandType.Text
.Connection = SqlConnection
.ExecuteNonQuery()
End With
SqlConnection.Close()
MsgBox("Succesfully Added!")
SqlConnection.Dispose()
End Sub
然而,.ExecuteNonQuery()
在错误和问题方面让我非常头疼。它上传数据,但是之前只能执行一次(一次上传),它会返回错误。
当我删除 .ExecuteNonQuery()
时,没有上传数据?所以我觉得还是有必要的。
这是我上传的代码(部分)
sql = "INSERT INTO students(student_id, title, initial, surname,
street, city, pcode, country ) VALUES ('" & strStudent & "', '"
& vtital & "', '" & vinital & "', '" & vsurname & "', '" & vstreet
& "', '" & vcity & "', '" & vpcode & "', '" & vcountry & "' )"
SaveNames(sql)
希望我的问题有意义并且我能传达信息
最佳答案
您保存此数据的方法存在一些错误,可能会导致您的问题。
第一个问题是代码不使用参数化查询。这是一个安全问题(Sql 注入(inject)),也是一个简单的逻辑问题。如果您连接字符串来构建 SQL 查询,那么您会遇到一个问题,即字符串中包含对数据库 SQL 引擎具有特殊含义的字符。如果您的字符串之一包含单引号怎么办?它将被视为字符串的结尾,而文本的其余部分则被视为无效 sql。
第二个问题是在出现异常时也缺少 MySqlConnection 的打开/关闭/处置。这是通过使用 Using Statement 解决的。
所以我会将你的方法重写为
Public SaveNames(ByRef SQLStatment As String, List(Of MySqlParameter) parameters) As Integer
Using con = new MySqlConnection(... put here the connection string...)
Using cmd = New MySqlCommand(SQLStatment, con)
if parameters.Count > 0 Then
cmd.Parameters.AddRange(parameters.ToArray())
End If
return cmd.ExecuteNonQuery()
End Using
End Using
End Function
并用这样的代码调用它
sql = "INSERT INTO students(student_id, title, initial, surname," & _
"street, city, pcode, country ) VALUES (@id,@title,@init,@sur," & _
"@street,@city,@pcode,@country)"
Dim ps = New List(Of MySqlParameters)()
Dim p = new MySqlParameter("@id", MySqlDbType.Int32).Value = Convert.ToInt32(strStudent)
ps.Add(p)
p = new MySqlParameter("@title", MySqlDbType.VarChar).Value = vtital
ps.Add(p)
.. and so on for the other parameters.
.. respecting the actual datatype on the database table
.....
SaveNames(sql, ps)
关于mysql - 在 vb.net 中将 sql 数据添加到 DB 是否需要 .ExecuteNonQuery(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22192334/