2017-02-01 67 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

您是否嘗試過嘗試/趕上? – 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;} 
}