2017-02-01 5 views
0

이해가 안됩니다. 이 코드는 제대로 작동 할 것입니다.SQL Server 데이터베이스에서 새 정보를 업데이트하지 않습니다.

내가 잘못 한 것을 누구든지 볼 수 있습니까?

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

감사합니다 :

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

는 그리고 이것은 후속이다.

+3

을 "는 작동하지"왜이 마지막 하나는 알아내는 데 도움이 될 것입니다. 그렇지 않으면 생성 된 쿼리를 실행 해 보셨습니까? – Stephen

+1

시도/따라 잡기를 시도 했습니까? – Snowlockk

+0

추가 메모로 변경 내용이 커밋되기 전에 성공 메시지를 표시하지 마십시오. – Stephen

답변

2

사이드 노트 :

  1. 은 항상 쿼리에 대한 매개 변수와 결코 문자열 연결을 사용합니다. 재미를 위해 Bobby Tables
  2. 정적을 사용하지 마십시오. 필요한 곳이 많지 않습니다.
  3. 데이터베이스 연결을 공유하지 말고 필요에 따라 만들어야합니다.
  4. 비밀번호를 일반 텍스트로 저장하지 마십시오!
  5. 처리 할 계획이없는 예외를 catch하지 마십시오. 그들을 기록하고 (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;} 
}