使用参数将数据插入 MySQLTable
Inserting Data into MySQLTable using Params
我有这个数据表,我想向其中插入数据,但每次执行此代码时都会出错。
"Unknown data type"
我在模块上有一个函数(因此我不必重写它,我可以从每个表单调用它)来打开 MySQL 连接。
Imports MySql.Data.MySqlClient
Imports System.Net.Mail
Module Module1
Public MyConnection As New MySqlConnection
Public lastLogon As String = Today.Day & "/" & Today.Month & "/" & Today.Year & TimeOfDay.Hour & ":" & TimeOfDay.Minute & ":" & TimeOfDay.Second
Function ServerConnection()
Try
MyConnection.ConnectionString = "server=127.0.0.1;user=root;password=password;database=titulo"
MyConnection.Open()
Return True
Catch ex As Exception
Return False
End Function
'Don't mind this
+ Function SendMail(SendTo As String, subject As String, message As String)
End Function
End Module
所以我使用 ServerConnection 函数调用它,并将连接存储到一个名为 MyConnection 的 public var 中,我可以从所有其他表单调用它。
问题是,我有这段代码可以创建一个将数据插入 table 的帐户:(对于西班牙语,我很抱歉。只需检查代码,不要介意 SendMail 函数)
Private Sub btnDo_Click(sender As Object, e As EventArgs) Handles btnDo.Click
If txtUsername.Text <> "" And txtPassword.Text <> "" And txtPassword2.Text <> "" And txtEmail.Text <> "" Then
If mailUsed = False Then
If userUsed = False Then
If txtPassword.Text <> txtPassword2.Text Then
lblError.Text = "Revise sus contraseñas."
Else
lblError.Text = ""
Try
ServerConnection()
Dim MyCommand As New MySqlCommand("INSERT INTO titulo.accounts(id, accountName, accountPassword, accountMail, accountLogon) VALUES(0, @username, @password, @email, @logon)", MyConnection)
MyCommand.Parameters.Add("@username", SqlDbType.VarChar, 10).Value = txtUsername.Text
MyCommand.Parameters.Add("@password", SqlDbType.VarChar, 16).Value = txtPassword.Text
MyCommand.Parameters.Add("@email", SqlDbType.VarChar, 60).Value = txtEmail.Text
MyCommand.Parameters.Add("@logon", SqlDbType.VarChar, 22).Value = "First Session."
MyCommand.ExecuteNonQuery()
Try
SendMail(txtEmail.Text, "Nueva cuenta en TITULO", txtUsername.Text & Environment.NewLine & " Se ha creado una cuenta a su nombre en " & My.Application.Info.AssemblyName & Environment.NewLine & "Nombre de cuenta: " & txtUsername.Text & Environment.NewLine & "Contraseña: " & txtPassword.Text)
Catch ex As Exception
MsgBox(ex.Message)
Finally
MsgBox("Cuenta creada. Correo enviado a: " & txtEmail.Text & ".")
End Try
Catch ex As Exception
MessageBox.Show("Error en la base de datos." & Environment.NewLine & ex.Message)
Finally
MyConnection.Close()
End Try
MsgBox("La cuenta " & txtUsername.Text & " ha sido creada." & Environment.NewLine & "Revise su correo " & txtEmail.Text & " para revisar sus datos.")
End If
Else
lblError.Text = "Ya existe una cuenta con ese nombre."
End If
Else
lblError.Text = "Ese correo ya esta en uso."
End If
Else
lblError.Text = "Revise sus datos."
End If
End Sub
再次对西班牙语感到抱歉。
我在 titulo 数据库上的帐户 table 具有以下数据类型
id
INT NOT NULL AUTO_INCREMENT,
accountName
VARCHAR(10) 不为空,
accountPassword
VARCHAR(16) 不为空,
accountMail
VARCHAR(60) 不为空,
accountLogon
VARCHAR(22) 不为空,
如有任何帮助,我将不胜感激。
MySql 代码应该使用 MySqlDbType 枚举来定义参数的数据类型。您正在使用 SqlDbType。
此代码将向您显示两者的值不同
int x = (int)SqlDbType.VarChar;
int y = (int)MySqlDbType.VarChar;
Console.WriteLine("SqlDbType.VarChar = " + x);
Console.WriteLine("MySqlDbType.VarChar = " + y);
输出为
SqlDbType.VarChar = 22
MySqlDbType.VarChar = 253
与您的实际问题无关,但我需要告知您代码中存在很大的安全风险。不要以明文形式存储密码。始终使用哈希算法和盐密钥来存储用户密码的不可逆字节。
Best way to store password in database
我有这个数据表,我想向其中插入数据,但每次执行此代码时都会出错。
"Unknown data type"
我在模块上有一个函数(因此我不必重写它,我可以从每个表单调用它)来打开 MySQL 连接。
Imports MySql.Data.MySqlClient
Imports System.Net.Mail
Module Module1
Public MyConnection As New MySqlConnection
Public lastLogon As String = Today.Day & "/" & Today.Month & "/" & Today.Year & TimeOfDay.Hour & ":" & TimeOfDay.Minute & ":" & TimeOfDay.Second
Function ServerConnection()
Try
MyConnection.ConnectionString = "server=127.0.0.1;user=root;password=password;database=titulo"
MyConnection.Open()
Return True
Catch ex As Exception
Return False
End Function
'Don't mind this
+ Function SendMail(SendTo As String, subject As String, message As String)
End Function
End Module
所以我使用 ServerConnection 函数调用它,并将连接存储到一个名为 MyConnection 的 public var 中,我可以从所有其他表单调用它。
问题是,我有这段代码可以创建一个将数据插入 table 的帐户:(对于西班牙语,我很抱歉。只需检查代码,不要介意 SendMail 函数)
Private Sub btnDo_Click(sender As Object, e As EventArgs) Handles btnDo.Click
If txtUsername.Text <> "" And txtPassword.Text <> "" And txtPassword2.Text <> "" And txtEmail.Text <> "" Then
If mailUsed = False Then
If userUsed = False Then
If txtPassword.Text <> txtPassword2.Text Then
lblError.Text = "Revise sus contraseñas."
Else
lblError.Text = ""
Try
ServerConnection()
Dim MyCommand As New MySqlCommand("INSERT INTO titulo.accounts(id, accountName, accountPassword, accountMail, accountLogon) VALUES(0, @username, @password, @email, @logon)", MyConnection)
MyCommand.Parameters.Add("@username", SqlDbType.VarChar, 10).Value = txtUsername.Text
MyCommand.Parameters.Add("@password", SqlDbType.VarChar, 16).Value = txtPassword.Text
MyCommand.Parameters.Add("@email", SqlDbType.VarChar, 60).Value = txtEmail.Text
MyCommand.Parameters.Add("@logon", SqlDbType.VarChar, 22).Value = "First Session."
MyCommand.ExecuteNonQuery()
Try
SendMail(txtEmail.Text, "Nueva cuenta en TITULO", txtUsername.Text & Environment.NewLine & " Se ha creado una cuenta a su nombre en " & My.Application.Info.AssemblyName & Environment.NewLine & "Nombre de cuenta: " & txtUsername.Text & Environment.NewLine & "Contraseña: " & txtPassword.Text)
Catch ex As Exception
MsgBox(ex.Message)
Finally
MsgBox("Cuenta creada. Correo enviado a: " & txtEmail.Text & ".")
End Try
Catch ex As Exception
MessageBox.Show("Error en la base de datos." & Environment.NewLine & ex.Message)
Finally
MyConnection.Close()
End Try
MsgBox("La cuenta " & txtUsername.Text & " ha sido creada." & Environment.NewLine & "Revise su correo " & txtEmail.Text & " para revisar sus datos.")
End If
Else
lblError.Text = "Ya existe una cuenta con ese nombre."
End If
Else
lblError.Text = "Ese correo ya esta en uso."
End If
Else
lblError.Text = "Revise sus datos."
End If
End Sub
再次对西班牙语感到抱歉。
我在 titulo 数据库上的帐户 table 具有以下数据类型
id
INT NOT NULL AUTO_INCREMENT,
accountName
VARCHAR(10) 不为空,
accountPassword
VARCHAR(16) 不为空,
accountMail
VARCHAR(60) 不为空,
accountLogon
VARCHAR(22) 不为空,
如有任何帮助,我将不胜感激。
MySql 代码应该使用 MySqlDbType 枚举来定义参数的数据类型。您正在使用 SqlDbType。
此代码将向您显示两者的值不同
int x = (int)SqlDbType.VarChar;
int y = (int)MySqlDbType.VarChar;
Console.WriteLine("SqlDbType.VarChar = " + x);
Console.WriteLine("MySqlDbType.VarChar = " + y);
输出为
SqlDbType.VarChar = 22
MySqlDbType.VarChar = 253
与您的实际问题无关,但我需要告知您代码中存在很大的安全风险。不要以明文形式存储密码。始终使用哈希算法和盐密钥来存储用户密码的不可逆字节。
Best way to store password in database