Vb.net 查看是否存在电子邮件
我可以创建注册,但我不确定如何检查数据库中是否已经存在电子邮件。我需要先搜索数据库还是有一行代码可以使用Vb.net 查看是否存在电子邮件,vb.net,Vb.net,我可以创建注册,但我不确定如何检查数据库中是否已经存在电子邮件。我需要先搜索数据库还是有一行代码可以使用 MyConn = New OleDbConnection MyConn.ConnectionString = connString MyConn.Open() Dim cmd1 As OleDbCommand = New OleDbCommand(str1, MyConn) str1 = "insert into UserData ([First Name], [Last Name],
MyConn = New OleDbConnection
MyConn.ConnectionString = connString
MyConn.Open()
Dim cmd1 As OleDbCommand = New OleDbCommand(str1, MyConn)
str1 = "insert into UserData ([First Name], [Last Name], [Email], [Address], [Phone Number], [Username], [Password]) values (?, ?, ?, ?, ?, ?, ?)"
cmd1.Parameters.Add(New OleDbParameter("First Name", CType(TxtFirstNameReg.Text, String)))
cmd1.Parameters.Add(New OleDbParameter("Last Name", CType(TxtLastNameReg.Text, String)))
cmd1.Parameters.Add(New OleDbParameter("Email", CType(TxtEmailReg.Text, String)))
cmd1.Parameters.Add(New OleDbParameter("Address", CType(TxtAddress.Text, String)))
cmd1.Parameters.Add(New OleDbParameter("Phone Number", CType(TxtPhoneNumReg.Text, String)))
cmd1.Parameters.Add(New OleDbParameter("Username", CType(TxtUsernameReg.Text, String)))
cmd1.Parameters.Add(New OleDbParameter("Password", CType(TxtPasswordReg.Text, String)))
Try
cmd1.ExecuteNonQuery()
cmd1.Dispose()
MsgBox("Your account has been created")
Dim objOutlook As Object
Dim objOutlookMsg As Object
objOutlook = CreateObject("Outlook.Application")
objOutlookMsg = objOutlook.CreateItem(0)
With objOutlookMsg
.To = TxtEmailReg.Text
.Subject = "Registration Confirmation"
.Body = "Thank you for registering with Hotel Booking System, your login details for this account are as follows" & Environment.NewLine & Environment.NewLine & " Username: " & TxtUsernameReg.Text & Environment.NewLine & " Password: " & TxtPasswordReg.Text
.Send()
End With
objOutlookMsg = Nothing
objOutlook = Nothing
Catch ex As Exception
'MsgBox(ex.Message)
End Try
MyConn.Close()
我会先检查数据库,看看电子邮件地址是否存在:
Using con As New OleDbConnection(connString ),
cmd As New OleDbCommand("SELECT * FROM [UserData] WHERE [Email] = ?", con)
cmd.Parameters.Add(New OleDbParameter("@Email", OleDbType.VarChar)).Value = TxtEmailReg.Text
con.Open()
If cmd.ExecuteReader().HasRows Then
'Record exists
End If
End Using
请注意,我已经实施了:
有时,代码需要非托管资源,例如文件句柄、COM包装器或SQL连接。Using块保证在代码使用完一个或多个这样的资源后可以对它们进行处理。这使它们可供其他代码使用
我还将在传递参数时指定数据类型。在你的情况下,这可能没关系,但我仍然会考虑使用这个参数来添加参数。在这一点上,值得注意的是,当使用OleDbParameter
时,重要的是顺序,而不是名称。您已经有订购权,但希望指出这一点以供将来参考
你也不需要以你现在的方式使用。.Text
属性已经是typeString
,因此在这种情况下使用CType
实际上不起任何作用
请注意,它告诉您有多少行受到影响。这是值得检查的
在处理Outlook时,考虑使用命名空间直接使用对象。你将不得不下载这些,但它很简单。只要有一个谷歌。我还将考虑实现一些代码来帮助释放这些对象。这是基于以下答案:
我整理了一些示例代码,希望能给您一个良好的开端:Dim addressExists As Boolean = False
Dim userAdded As Boolean = False
Using con As New OleDbConnection(connString)
Using cmd As New OleDbCommand("SELECT * FROM [UserData] WHERE [Email] = ?", con)
cmd.Parameters.Add(New OleDbParameter("@Email", OleDbType.VarChar)).Value = TxtEmailReg.Text
con.Open()
If cmd.ExecuteReader().HasRows Then
addressExists = True
End If
End Using
If addressExists Then
MessageBox.Show("Email address already exists.", "Email Exists", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Using cmd As New OleDbCommand("INSERT INTO [UserData] ([First Name], [Last Name], [Email], [Address], [Phone Number], [Username], [Password]) VALUES(?, ?, ?, ?, ?, ?, ?)", con)
cmd.Parameters.Add(New OleDbParameter("@FirstName", OleDbType.VarChar)).Value = TxtFirstNameReg.Text
cmd.Parameters.Add(New OleDbParameter("@LastName", OleDbType.VarChar)).Value = TxtLastNameReg.Text
cmd.Parameters.Add(New OleDbParameter("@Email", OleDbType.VarChar)).Value = TxtEmailReg.Text
cmd.Parameters.Add(New OleDbParameter("@Address", OleDbType.VarChar)).Value = TxtAddress.Text
cmd.Parameters.Add(New OleDbParameter("@PhoneNumber", OleDbType.VarChar)).Value = TxtPhoneNumReg.Text
cmd.Parameters.Add(New OleDbParameter("@Username", OleDbType.VarChar)).Value = TxtUsernameReg.Text
cmd.Parameters.Add(New OleDbParameter("@Password", OleDbType.VarChar)).Value = TxtPasswordReg.Text
If cmd.ExecuteNonQuery() = 1 Then
userAdded = True
End If
End Using
End If
End Using
If userAdded Then
MessageBox.Show("Your account has been created", "Account Created", MessageBoxButtons.OK, MessageBoxIcon.Information)
Dim oApp As New Outlook.Application
Dim oMessage As Outlook.MailItem = DirectCast(oApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
With oMessage
.To = TxtEmailReg.Text
.Subject = "Registration Confirmation"
.Body = .Body = "Thank you for registering with Hotel Booking System, your login details for this account are as follows" & Environment.NewLine & Environment.NewLine & " Username: " & TxtUsernameReg.Text & Environment.NewLine & " Password: " & TxtPasswordReg.Text
.Send()
End With
ReleaseObject(oMessage)
ReleaseObject(oApp)
End If
这超出了这个问题的范围,但我也会研究加密密码。将它们存储为纯文本是不好的做法。看看这个所谓的问题,这可能会给你一些如何最好地做到这一点的想法
我希望这能给你提供一些信息。我会先检查数据库,看看电子邮件地址是否存在:
Using con As New OleDbConnection(connString ),
cmd As New OleDbCommand("SELECT * FROM [UserData] WHERE [Email] = ?", con)
cmd.Parameters.Add(New OleDbParameter("@Email", OleDbType.VarChar)).Value = TxtEmailReg.Text
con.Open()
If cmd.ExecuteReader().HasRows Then
'Record exists
End If
End Using
请注意,我已经实施了:
有时,代码需要非托管资源,例如文件句柄、COM包装器或SQL连接。Using块保证在代码使用完一个或多个这样的资源后可以对它们进行处理。这使它们可供其他代码使用
我还将在传递参数时指定数据类型。在你的情况下,这可能没关系,但我仍然会考虑使用这个参数来添加参数。在这一点上,值得注意的是,当使用OleDbParameter
时,重要的是顺序,而不是名称。您已经有订购权,但希望指出这一点以供将来参考
你也不需要以你现在的方式使用。.Text
属性已经是typeString
,因此在这种情况下使用CType
实际上不起任何作用
请注意,它告诉您有多少行受到影响。这是值得检查的
在处理Outlook时,考虑使用命名空间直接使用对象。你将不得不下载这些,但它很简单。只要有一个谷歌。我还将考虑实现一些代码来帮助释放这些对象。这是基于以下答案:
我整理了一些示例代码,希望能给您一个良好的开端:Dim addressExists As Boolean = False
Dim userAdded As Boolean = False
Using con As New OleDbConnection(connString)
Using cmd As New OleDbCommand("SELECT * FROM [UserData] WHERE [Email] = ?", con)
cmd.Parameters.Add(New OleDbParameter("@Email", OleDbType.VarChar)).Value = TxtEmailReg.Text
con.Open()
If cmd.ExecuteReader().HasRows Then
addressExists = True
End If
End Using
If addressExists Then
MessageBox.Show("Email address already exists.", "Email Exists", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Using cmd As New OleDbCommand("INSERT INTO [UserData] ([First Name], [Last Name], [Email], [Address], [Phone Number], [Username], [Password]) VALUES(?, ?, ?, ?, ?, ?, ?)", con)
cmd.Parameters.Add(New OleDbParameter("@FirstName", OleDbType.VarChar)).Value = TxtFirstNameReg.Text
cmd.Parameters.Add(New OleDbParameter("@LastName", OleDbType.VarChar)).Value = TxtLastNameReg.Text
cmd.Parameters.Add(New OleDbParameter("@Email", OleDbType.VarChar)).Value = TxtEmailReg.Text
cmd.Parameters.Add(New OleDbParameter("@Address", OleDbType.VarChar)).Value = TxtAddress.Text
cmd.Parameters.Add(New OleDbParameter("@PhoneNumber", OleDbType.VarChar)).Value = TxtPhoneNumReg.Text
cmd.Parameters.Add(New OleDbParameter("@Username", OleDbType.VarChar)).Value = TxtUsernameReg.Text
cmd.Parameters.Add(New OleDbParameter("@Password", OleDbType.VarChar)).Value = TxtPasswordReg.Text
If cmd.ExecuteNonQuery() = 1 Then
userAdded = True
End If
End Using
End If
End Using
If userAdded Then
MessageBox.Show("Your account has been created", "Account Created", MessageBoxButtons.OK, MessageBoxIcon.Information)
Dim oApp As New Outlook.Application
Dim oMessage As Outlook.MailItem = DirectCast(oApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
With oMessage
.To = TxtEmailReg.Text
.Subject = "Registration Confirmation"
.Body = .Body = "Thank you for registering with Hotel Booking System, your login details for this account are as follows" & Environment.NewLine & Environment.NewLine & " Username: " & TxtUsernameReg.Text & Environment.NewLine & " Password: " & TxtPasswordReg.Text
.Send()
End With
ReleaseObject(oMessage)
ReleaseObject(oApp)
End If
这超出了这个问题的范围,但我也会研究加密密码。将它们存储为纯文本是不好的做法。看看这个所谓的问题,这可能会给你一些如何最好地做到这一点的想法
我希望这能让你有所进展