2017-02-01 3 views
0

Я этого не понимаю. Этот код должен работать, но должно быть что-то, что я сделал неправильно.База данных SQL Server не будет обновлять новую информацию

Может ли кто-нибудь увидеть, что я сделал неправильно?

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); 

И это следование:

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; 
} 

Спасибо.

+3

может рассмотреть вопрос об использовании параметризованных запросов. В противном случае вы пытались запустить сгенерированный запрос? – Stephen

+1

Вы пробовали переходить через ваш try/catch? – Snowlockk

+0

В качестве побочного примечания старайтесь избегать отображения успешных сообщений до того, как изменения будут выполнены. – Stephen

ответ

2

Боковые ноты:

  1. Всегда используйте параметры для ваших запросов и никогда конкатенации. Для развлечения см. Bobby Tables
  2. Не используйте статические предметы, вам не так много мест.
  3. Не разделяйте соединения с базой данных, создавайте их и уничтожайте их по мере необходимости.
  4. Не храните пароли как обычный текст!
  5. Не перехватывайте исключения, которые вы не планируете обрабатывать. Запишите их и сверните (используя throw;) или вообще не поймайте. Это последний поможет вам понять, почему "он не работает"

обновленный код

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;} 
}