2017-02-01 9 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;} 
} 
関連する問題