2012-05-16 2 views
1

asp.net WebService를 만들었습니다. 유효성을 검사 한 후 사용자 정보를 업데이트하려는 경우, 사용자가 입력 한 새 UserName이 이미 존재하지 않는 경우에만 새 UserName을 업데이트 할 수 있습니다.웹 메서드 실행시 오류가 발생했습니다.

문제는 사용자의 유효성을 검사하지만 사용자가 아닌 새로운 UserName을 지정하려고 할 때와 같은 오류가 발생하는 것입니다.

public int UpdateUserInfo(string oldusername, string newusername, string mailid, string password) 
    { 
     string validateUser = "Select UserName from tbl_UserInfo where UserName='" + newusername + "' "; 
     con = new MySqlConnection(conString); 
     con.Open(); 
     MySqlCommand cmd1 = new MySqlCommand(validateUser, con); 
     string User = cmd1.ExecuteScalar().ToString(); 
     con.Close(); 
     if (User == newusername) 
     { 
      return 0; 
     } 
     else 
     { 
      string updateUser = "Update tbl_UserInfo SET UserName='" + newusername + "',Password='" + password + "',Email_ID='" + mailid + "' where UserName='" + oldusername + "' "; 
      con = new MySqlConnection(conString); 
      con.Open(); 
      MySqlCommand cmd = new MySqlCommand(updateUser, con); 
      int success = cmd.ExecuteNonQuery(); 
      con.Close(); 

      if (success > 0) 
      { 
       return success; 
      } 
      else 
       return 0; 
     } 
    } 

참고 :

Request format is unrecognized for URL unexpectedly ending in '/UpdateUserInfo'. 

다음

내 코드는 내가 같은 결과를 원하는;

  IF my UserName is A and when i update that UserName with same name 
      i.e A than it should not be updated but when i give another name as B 
      than it should be updated by B i.e now UserName A becomes the B 

무엇이 문제 일 수 있습니까?

해결책을주십시오.

감사합니다.

+0

이 시도를 http://stackoverflow.com/questions/657313/request-format-is-unlognogn-for-url-unexpectedly-ending-in – Tariqulazam

+0

웹 서비스의 메소드를'[WebMethod]'로 선언 했습니까? 너 어디서 전화하는거야? 그것은 POST 요청 또는 GET입니까? – Murtaza

답변

4

아, 매개 변수가있는 쿼리를 사용하십시오. 아, 그리고 IDisposable 리소스를 처분. 당신은 자신에게 두통, SQL 인젝션, 잘못 형식의 데이터, ...

public int UpdateUserInfo(
    string oldusername, 
    string newusername, 
    string mailid, 
    string password 
) 
{ 
    using (var con = new MySqlConnection(conString)) 
    using (var cmd = con.CreateCommand()) 
    { 
     con.Open(); 
     cmd.CommandText = "SELECT count(UserName) from tbl_UserInfo where UserName = @newusername"; 
     cmd.Parameters.AddWithValue("@newusername", newusername); 

     var count = (long)cmd.ExecuteScalar(); 
     if (count < 1) 
     { 
      return 0; 
     } 
    } 

    using (var con = new MySqlConnection(conString)) 
    using (var cmd = con.CreateCommand()) 
    { 
     con.Open(); 
     cmd.CommandText = "UPDATE tbl_UserInfo SET UserName = @newusername, Password = @password, Email_ID = @mailid WHERE UserName = @oldusername"; 
     cmd.Parameters.AddWithValue("@newusername", newusername); 
     cmd.Parameters.AddWithValue("@password", password); 
     cmd.Parameters.AddWithValue("@mailid", mailid); 
     cmd.Parameters.AddWithValue("@oldusername", oldusername); 
     return cmd.ExecuteNonQuery(); 
    } 
} 

을 저장 줘야 또는 당신은 또한 별도의 방법으로 그 분할 수 :

public bool UsernameExists(string username) 
{ 
    using (var con = new MySqlConnection(conString)) 
    using (var cmd = con.CreateCommand()) 
    { 
     con.Open(); 
     cmd.CommandText = "SELECT count(UserName) from tbl_UserInfo where UserName = @newusername"; 
     cmd.Parameters.AddWithValue("@newusername", username); 
     return (long)cmd.ExecuteScalar() > 0; 
    } 
} 

public int Update(string oldusername, string newusername, string mailid, string password) 
{ 
    using (var con = new MySqlConnection(conString)) 
    using (var cmd = con.CreateCommand()) 
    { 
     con.Open(); 
     cmd.CommandText = "UPDATE tbl_UserInfo SET UserName = @newusername, Password = @password, Email_ID = @mailid WHERE UserName = @oldusername"; 
     cmd.Parameters.AddWithValue("@newusername", newusername); 
     cmd.Parameters.AddWithValue("@password", password); 
     cmd.Parameters.AddWithValue("@mailid", mailid); 
     cmd.Parameters.AddWithValue("@oldusername", oldusername); 
     return cmd.ExecuteNonQuery(); 
    } 
} 

public int UpdateUserInfo(string oldusername, string newusername, string mailid, string password) 
{ 
    if (!UsernameExists(newusername)) 
    { 
     return Update(oldusername, newusername, mailid, password); 
    } 
    return 0; 
} 
+0

이 코드를 사용하면 사용자 이름은 대소 문자를 구분합니다. 아마도 그게 문제일까요? – riffnl

+0

데이터베이스에 정확한 쿼리를 보내려면 SQL 디버거를 연결 했습니까? –

+0

예,하지만 SQL 서버에 디버거를 연결하여 전송되는 쿼리를 분석 할 수 있습니다. –

관련 문제