Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 查看是否存在电子邮件_Vb.net - Fatal编程技术网

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
属性已经是type
String
,因此在这种情况下使用
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
属性已经是type
String
,因此在这种情况下使用
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
这超出了这个问题的范围,但我也会研究加密密码。将它们存储为纯文本是不好的做法。看看这个所谓的问题,这可能会给你一些如何最好地做到这一点的想法

我希望这能让你有所进展