2017-02-01 4 views
0

Ich verstehe es nicht. Dieser Code sollte funktionieren, aber ich muss etwas falsch gemacht haben.SQL Server-Datenbank aktualisiert keine neuen Informationen

Kann jemand sehen, was ich falsch gemacht habe?

string username = tbNewUSER.Text.Trim(); 
string password = tbNewPass.Text.Trim(); 
string role = "USER"; 
string str = "insert into UserValidation (USERNAME, PASSWORD, ROLE) values ('" + username + "','" + password + "','" + role + "')"; 

MessageBox.Show(username + " Registered", "User registration",MessageBoxButtons.OK, MessageBoxIcon.Information); 

clsDB.InsUpDel(str); 

Und dies ist der Follow-up:

public static int InsUpDel(string str) 
{ 
    if (!(conn.State == ConnectionState.Open)) 
     conn.Open(); //open connection if closed 

    int numRows = 0; //counter that checks number of rows affected in the db 

    try 
    { 
     SqlCommand cmd = new SqlCommand(str, conn); 
     numRows = cmd.ExecuteNonQuery(); 
     cmd = null; 
    } 
    catch (SqlException ex) 
    { 
     string errorMsg = ex.Message; //more code can be put here    
    } 

    if (conn.State == ConnectionState.Open) 
     conn.Close(); 

    return numRows; 
} 

Danke.

+3

wollen kann unter Verwendung einer parametrisierten Abfrage zu berücksichtigen. Haben Sie sonst versucht, die generierte Abfrage auszuführen? – Stephen

+1

Haben Sie versucht, Ihren Versuch/Fang zu durchlaufen? – Snowlockk

+0

Als eine Nebenbemerkung versuchen Sie, Erfolgsmeldungen anzuzeigen, bevor die Änderungen festgeschrieben werden. – Stephen

Antwort

2

Side Hinweise:

  1. Verwenden Sie immer Parameter für Ihre Fragen und String-Verkettung nie. Zum Spaß siehe Bobby Tables
  2. Verwenden Sie keine statische, es gibt nicht viele Orte, die Sie brauchen.
  3. Datenbankverbindungen nicht teilen, erstellen und nach Bedarf zerstören.
  4. Passwörter nicht als reinen Text speichern!
  5. Fangen Sie keine Ausnahmen, die Sie nicht behandeln möchten. Loggen Sie sie ein und wiederholen Sie den Vorgang (mit throw;) oder fangen Sie überhaupt nicht. Das letzte wird Ihnen helfen, herauszufinden, warum

Aktualisiert Code

"es funktioniert nicht"
public void UpdateUser() { 
    var userModel = new UserModel { 
    Username = tbNewUSER.Text.Trim(), 
    Password = tbNewPass.Text.Trim(), 
    Role = "USER" 
    }; 

    var result = UpdateUser(userModel); 
} 


public int UpdateUser(UserModel user) 
{ 
    const string str = "insert into UserValidation (USERNAME, PASSWORD, ROLE) values (@userName, @password, @role)"; 
    using(var conn = new SqlConnection("your connection string here, hint best to get it from the app.config")) 
    using(var command = new SqlCommand(str, conn)) 
    { 
     command.Parameters.Add(new SqlParameter("@userName", SqlDbType.VarChar, 255) {Value = user.UserName}); 
     command.Parameters.Add(new SqlParameter("@password", SqlDbType.VarChar, 255) {Value = user.Password}); 
     command.Parameters.Add(new SqlParameter("@role", SqlDbType.VarChar, 255) {Value = user.Role}); 
     conn.Open(); 
     return cmd.ExecuteNonQuery(); 
    } 
} 

UserModel.cs

public class UserModel { 
    public string UserName {get;set;} 
    public string Password {get;set;} 
    public string Role {get;set;} 
} 
Verwandte Themen