2016-05-08 12 views
2

私は学校プロジェクトとして電子商取引のウェブサイトを構築しています。これは、ユーザーの詳細を記入しなければならないページなので、ユーザーを重複させないようにするにはどうすればよいですか。重複なしで挿入ASP.net(VB.net)を使用したMS Access

Sell article page

これは私が今使っているとのExecuteNonQueryは動作しないコードです。それは何のエラーも与えず、ただそれをスキップします。

Protected Sub bntVerzenden_Click(sender As Object, e As EventArgs) Handles bntVerzenden.Click 

    Dim sqlCommand As String 
    Dim intGebruikersID, intRubriekID As Integer 
    Dim VerkopenConn As New OleDb.OleDbConnection 
    Dim VerkopenCommArtikel, VerkopenCommGebruiker, GebruikersIDComm, RubriekIDComm, EmailComm As New OleDb.OleDbCommand 



    VerkopenConn.ConnectionString = My.Settings.SvShopConnection 
    VerkopenCommArtikel.Connection = VerkopenConn 
    VerkopenCommGebruiker.Connection = VerkopenConn 
    GebruikersIDComm.Connection = VerkopenConn 
    RubriekIDComm.Connection = VerkopenConn 
    EmailComm.Connection = VerkopenConn 


    'Email Controleren 
    sqlCommand = "SELECT * FROM tblGebruiker WHERE GebruikersEmail = '" & txtEmail.Text & "'" 

    EmailComm.CommandText = sqlCommand 
    If VerkopenConn.State = ConnectionState.Closed Then VerkopenConn.Open() 

    If EmailComm.ExecuteNonQuery = 0 Then 


     'Gebruiker gegevens aan de database toevoegen 
     VerkopenCommGebruiker.CommandText = "INSERT INTO tblGebruiker (GebruikersNaam, GebruikersVoornaam, GebruikersEmail, GebruikersGSM) VALUES (@GebruikersNaam, @GebruikersVoornaam, @GebruikersEmail, @GebruikersGSM)" 

     VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersNaam", txtNaam.Text) 
     VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersVoornaam", txtVNaam.Text) 
     VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersEmail", txtEmail.Text) 
     VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersGSM", txtGsm.Text) 



     VerkopenCommGebruiker.ExecuteNonQuery() 


     'GebruikersID uit de database halen 
     GebruikersIDComm.CommandText = "SELECT tblGebruiker.GebruikersID FROM tblGebruiker WHERE tblGebruiker.GebruikersNaam = @Naam AND tblGebruiker.GebruikersVoornaam = @VNaam;" 

     GebruikersIDComm.Parameters.AddWithValue("@Naam", txtNaam.Text) 
     GebruikersIDComm.Parameters.AddWithValue("@VNaam", txtVNaam.Text) 

     intGebruikersID = Integer.Parse(GebruikersIDComm.ExecuteScalar) 

     'RubriekID uit de database halen 
     RubriekIDComm.CommandText = "SELECT tblRubriek.RubriekID FROM tblRubriek WHERE tblRubriek.RubriekNaam = @RubriekNaam" 

     RubriekIDComm.Parameters.AddWithValue("@RubriekNaam", lstRubriek.SelectedItem.ToString) 
     intRubriekID = Integer.Parse(RubriekIDComm.ExecuteScalar) 

     'Artikel gegevens aan de database toevoegen 
     VerkopenCommArtikel.CommandText = "INSERT INTO tblArtikel (ArtikelBeschrijving, ArtikelPrijs, RubriekID, ArtikelAankoopdatum, ArtikelTekoopgezet, ArtikelBeschikbaar, GebruikersID) VALUES (@ArtikelBeschrijving, @ArtikelPrijs, @RubriekID, @ArtikelAankoopdatum, @ArtikelTekoopgezet, @ArtikelBeschikbaar, @GebruikersID)" 

     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelBeschrijving", txtArtikelBeschrijving.Text) 
     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelPrijs", txtArtikelPrijs.Text) 
     VerkopenCommArtikel.Parameters.AddWithValue("@RubriekID", intRubriekID) 
     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelAankoopdatum", CalAankoop.SelectedDate) 
     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelTekoopgezet", calVerkoop.SelectedDate) 
     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelBeschikbaar", True) 
     VerkopenCommArtikel.Parameters.AddWithValue("@GebruikersID", intGebruikersID) 

     VerkopenCommArtikel.ExecuteNonQuery() 



     VerkopenConn.Close() 

    Else 




     'GebruikersID uit de database halen 
     GebruikersIDComm.CommandText = "SELECT tblGebruiker.GebruikersID FROM tblGebruiker WHERE tblGebruiker.GebruikersNaam = @Naam AND tblGebruiker.GebruikersVoornaam = @VNaam;" 

     GebruikersIDComm.Parameters.AddWithValue("@Naam", txtNaam.Text) 
     GebruikersIDComm.Parameters.AddWithValue("@VNaam", txtVNaam.Text) 

     intGebruikersID = Integer.Parse(GebruikersIDComm.ExecuteScalar) 

     'RubriekID uit de database halen 
     RubriekIDComm.CommandText = "SELECT tblRubriek.RubriekID FROM tblRubriek WHERE tblRubriek.RubriekNaam = @RubriekNaam" 

     RubriekIDComm.Parameters.AddWithValue("@RubriekNaam", lstRubriek.SelectedItem.ToString) 
     intRubriekID = Integer.Parse(RubriekIDComm.ExecuteScalar) 

     'Artikel gegevens aan de database toevoegen 
     VerkopenCommArtikel.CommandText = "INSERT INTO tblArtikel (ArtikelBeschrijving, ArtikelPrijs, RubriekID, ArtikelAankoopdatum, ArtikelTekoopgezet, ArtikelBeschikbaar, GebruikersID) VALUES (@ArtikelBeschrijving, @ArtikelPrijs, @RubriekID, @ArtikelAankoopdatum, @ArtikelTekoopgezet, @ArtikelBeschikbaar, @GebruikersID)" 

     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelBeschrijving", txtArtikelBeschrijving.Text) 
     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelPrijs", txtArtikelPrijs.Text) 
     VerkopenCommArtikel.Parameters.AddWithValue("@RubriekID", intRubriekID) 
     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelAankoopdatum", CalAankoop.SelectedDate) 
     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelTekoopgezet", calVerkoop.SelectedDate) 
     VerkopenCommArtikel.Parameters.AddWithValue("@ArtikelBeschikbaar", True) 
     VerkopenCommArtikel.Parameters.AddWithValue("@GebruikersID", intGebruikersID) 

     VerkopenCommArtikel.ExecuteNonQuery() 



     VerkopenConn.Close() 

    End If 



    System.Web.HttpContext.Current.Response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""Jouw artikel staat nu te koop"")</SCRIPT>") 

End Sub 

答えて

0

電子メールまたはフルネームのようなIDフィールドを紛失する必要があります。この列にユニークなインデックスを作成し、挿入時に例外をキャッチすることができます。または、ユーザーが既に追加されているかどうかを検証するための最初のクエリを起動します。

+0

私は、ユーザーがテーブルに追加されたときに自動的に生成PKとしてユーザーIDを持っています –

+1

PKが自動生成されたintの場合、それはあなたのニーズに合っていません。ユーザーが既に存在するかどうかを確認するには、電子メール、ssnなどのような自然なPKが必要です – Oscar

0

あなたは、ユーザーが既にデータベース内またはこのコードnot.Try存在している提供することをEMAILIDかどうかを確認することができます: -

SqlConnection Conn=new SqlConnection(your_connectionstring); 
SqlCommand command = new SqlCommand("select * from tblGebruiker where GebruikersEmail='" + emailid + "'", Conn); 
DataTable dtl = new DataTable(); 
SqlDataAdapter sqlDA = new SqlDataAdapter(command); 
sqlDA.Fill(dtl); 


if (dtl.Rows.Count > 0) 
{ 
    Response.Write("<script>alert('User already registered')</script>"); 
} 
else 
{ 
VerkopenCommGebruiker.CommandText = "INSERT INTO tblGebruiker (GebruikersNaam, GebruikersVoornaam, GebruikersEmail, GebruikersGSM) VALUES (@GebruikersNaam, @GebruikersVoornaam, @GebruikersEmail, @GebruikersGSM)" 

    VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersNaam", txtNaam.Text) 
    VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersVoornaam", txtVNaam.Text) 
    VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersEmail", txtEmail.Text) 
    VerkopenCommGebruiker.Parameters.AddWithValue("@GebruikersGSM", txtGsm.Text) 

    If VerkopenConn.State = ConnectionState.Closed Then VerkopenConn.Open() 
    VerkopenCommGebruiker.ExecuteNonQuery() 
} 
+0

"select * from tblGebruikerどこGebruikersEmail = '" + emailid + "'"; NO。動的SQLクエリを作成するために直接ユーザー入力を使用しないでください。このコードはSQLインジェクションを要求しています。代わりに、SqlCommandクラスとSqlParameterクラスを使用します。 – Oscar

+0

@Oscarあなたは何をお勧めしますか?私はあなたがそれで何を意味するのか本当に理解していない。 –

+0

@R Cこの行を実行できないようです。 'SqlDataAdapter sqlDA = new SqlDataAdapter(sql、Conn)' –

関連する問題