2016-07-08 3 views
1

Ich habe ein Formular (F1), wo Benutzer ihre jeweiligen Anmeldeinformationen Benutzername und Passwort angeben.Einfügen von Datensätzen durch Benutzer, der Winforms verbunden ist

Nach einer erfolgreichen Anmeldung werden die Steuerelemente in das Clientformular (F2) verschoben und der Begrüßungsbenutzername in einem Etikett angezeigt.

Client-Formular enthält:

  1. Etiketten und Textfelder (Name, Adresse, Funktion, ...)
  2. Knopf
  3. Datagridview binden an DB ein (Name, Adresse, Funktion. ., UserId)

Jetzt möchte ich zu inser t ein Kunde.

Nach dem Füllen von Textfeldern möchte ich einen Client eine Show hinzufügen, die vom Benutzer hinzugefügt wurde, der verbunden ist.

Beispiel: Wenn ich mit dem Benutzernamen Rose angemeldet habe, fügen Sie einen Client hinzu, in meiner DatagridView, zeigen Sie mir meine Reihe von Einfügen von Rose hinzugefügt.

-Code meiner Anmeldung und vorbei Benutzernamen Client-Formular

private void btnLogin_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      //textBox2.Text = Encrypt(textBox2.Text); 
      SqlConnection con = new SqlConnection("Data Source=User-PC\\SQLEXPRESS;Initial Catalog=timar;Integrated Security=True"); 
      SqlDataAdapter sda = new SqlDataAdapter("select Username from [User] where Username='" + textBox1.Text + "' and Password='" + textBox2.Text + "'", con); 
      DataTable dt = new DataTable(); 
      sda.Fill(dt); 
      if (dt.Rows.Count == 1) 
      { 
       this.Hide(); 
       Client c = new Client(dt.Rows[0][0].ToString()); 
       v.Show(); 
      } 
      else if (dt.Rows.Count > 1) 
      { 
       MessageBox.Show("Nom d'utilisateur et Mot de passe dupliqué !"); 
      } 
      else 
       MessageBox.Show("Nom d'utilisateur ou Mot de passe incorrecte !"); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

Hier ist mein Code von Insert:

public Client(string username) 
    { 
     InitializeComponent(); 

     lblUser.Text = username; 

     DisplayData(); 
     FillData(); 

    } 
private void button1_Click(object sender, EventArgs e) 
    { 
     if ( comboBox2.SelectedValue != null && textBox1.Text != string.Empty && textBox2.Text != string.Empty && textBox4.Text != string.Empty) 
     { 
      string cmdStr = "Insert into Client (idUser,name,address,function,telephone,commentaire)values (@idUser,@name,@,address,@function,@telephone,@commentaire)"; 
      SqlConnection con = new SqlConnection("Data Source=User-PC\\SQLEXPRESS;Initial Catalog=timar;Integrated Security=True"); 
      SqlCommand cmd = new SqlCommand(cmdStr, con); 
      con.Open(); 

     //The problem in the line below how Can I get the id of username,Error cannot convert string Rose to int. 
      cmd.Parameters.AddWithValue("@idUser",label.Text); 
      cmd.Parameters.AddWithValue("@name", (comboBox2.SelectedValue)); 
      cmd.Parameters.AddWithValue("@,address", textBox1.Text); 
      cmd.Parameters.AddWithValue("@function", textBox2.Text); 
      cmd.Parameters.AddWithValue("@telephone", textBox4.Text); 
      cmd.Parameters.AddWithValue("@commentaire",txtArchive.Text); 


      int LA = cmd.ExecuteNonQuery(); 
      con.Close(); 
      MessageBox.Show("Le Client a été ajouter avec succés !","Saisie Rendez-vous", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      DisplayData(); 
      ClearData(); 
     } 
     else 
     { 
      MessageBox.Show("Vérifier que tous les champs sont remplis !","Erreur",MessageBoxButtons.OK,MessageBoxIcon.Information); 
     } 
    } 

ich nicht in der Lage bin, um herauszufinden, wie dies zu tun Ich bin sehr neu in C# und versuche zu lernen.

Vielen Dank im Voraus.

+0

Ihre Frage ist unklar, mit welchem ​​Teil genau haben Sie Probleme mit? – Jamiec

+0

Ich erkläre mein Problem in einem Kommentar in meinem Code oben, ich möchte einen neuen Client hinzufügen und möchte wissen, dass von wem hinzugefügt wurde (Benutzer, der verbunden ist = Rose)? –

+0

oooh die eigentliche Frage ist in einem Code-Kommentar - ja, das ist nicht der beste Ort dafür! – Jamiec

Antwort

2

Wenn für die Anmeldung Überprüfung, schreiben Sie Ihre Abfrage auf diese Weise:

SELECT [Id], [UserName] from [Users] WHERE [UserName][email protected] AND [Password][email protected] 

Dann [Id] und [UserName] beide speichern, die Sie aus der Abfrage erhalten, wenn die Anmeldung erfolgreich ist (der resultset einen Datensatz enthält). Auf diese Weise können Sie den Benutzernamen und die ID des angemeldeten Benutzers jederzeit verwenden.

Zum Beispiel:

var cmd = @"SELECT [Id], [UserName] FROM [Users] " + 
      @"WHERE [UserName] = @UserName AND [Password] = @Password"; 
var cn = @"Data Source=User-PC\SQLEXPRESS;Initial Catalog=timar;Integrated Security=True"; 
var da = new SqlDataAdapter(cmd, cn); 
da.SelectCommand.Parameters.AddWithValue("@UserName", textBox1.Text); 
da.SelectCommand.Parameters.AddWithValue("@Password", textBox2.Text); 
var dt = new DataTable(); 
da.Fill(dt); 
if (dt.Rows.Count == 1) 
{ 
    int id = dt.Rows[0].Field<int>("Id"); 
    string userName = dt.Rows[0].Field<string>("UserName"); 
    //... 
} 

Hinweis:

  • sollten Sie parametrisierte Abfrage verwendet, um SQL-Injection-Angriffe zu verhindern.
+0

Der erste Datensatz des Ergebnisses' DataTable' enthält sowohl 'Id' als auch' UserName'. dt.Rows [0]. Zum Beispiel 'int id = dt.Rows [0] .Feld (" Id ");' und 'string userName = dt.Rows [0] .Feld (" UserName ");' –

+0

Wenn ich mein Programm starte und versuche mich einzuloggen, es zeigt mir einen Fehler: der Objektreferenz ist nicht definiert –

+0

Es scheint, dass Sie wissen, wie man einen parametrisierten Befehl ausführt, also habe ich ihn nicht zur Antwort hinzugefügt. Sicherlich können Sie die Objekt-Null-Referenz-Ausnahme selbst lösen. Ich habe keinen Code in der Antwort. Brauchst du mehr Hilfe? –

2

In erster Linie parametrisieren Sie Ihre Anfragen für die Anmeldung! Im Moment sind Sie sehr anfällig für SQL-Injection-Angriff! Sie erhalten einen Besuch von Little Bobby Tables.

Als Antwort auf Ihre Frage, ändern Sie die Abfrage in Ihrem Login-Formular, um sowohl die ID des Benutzers und ihren Benutzernamen zurückzugeben.

SqlDataAdapter sda = new SqlDataAdapter("select Id, Username from [User] where [email protected] and [email protected]", con); 

Wenn Sie jetzt das einzige Ergebnis lesen Sie 1 Id aus dem Feld 0 und Benutzernamen aus dem Feld bekommen.

if (dt.Rows.Count == 1) 
{ 
    this.Hide(); 
    var row = dt.Rows[0]; 
    int userId = (int)row[0]; 
    string username = (string)row[1]; 
    Client c = new Client(userId, username); 
    v.Show(); 
} 

Beachten Sie auch in diesem Code, bin ich vorbei sowohl auf die Client Form. Aktualisieren Sie den Konstruktor beide Informationen speichern in lokalen Variablen:

public class Client : Form 
{ 
    private int _userId; 

    public Client(int userId, string username) 
    { 
     InitializeComponent(); 

     _userId = userId; 
     lblUser.Text = username; 

     DisplayData(); 
     FillData(); 
    } 
} 

Danach können Sie _userId überall verwenden Sie in Client Form. Z.B. in der Speichern-Taste klicken:

cmd.Parameters.AddWithValue("@idUser",_userId); 
Verwandte Themen