2012-07-03 3 views
1

지금 C# 함수를 작성 중이며 사용자 암호를 반환해야합니다. 모두 괜찮아요,하지만이 프로젝트를 컴파일하려고하는 것보다 VS 할당되지 않은 변수에 대해 말해.C# MySQL 쿼리에서 변수를 설정하십시오.

string sqlLoginCheck (string userId) 
    { 
     string database, host, user, pass, sqlParams, sqlQuery; 
     string resultPassword; 

     database = "db"; 
     host = "localhost"; 
     user = "root"; 
     pass = "...."; 

     sqlParams = "Database=" + database + ";Data Source=" + host + ";User Id=" + user + ";Password=" + pass; 
     sqlQuery = "SELECT `id`, `name`, `pass` FROM `users` WHERE name = '" + userId + "' LIMIT 1"; 

     MySqlConnection sqlConnection = new MySqlConnection(sqlParams); 
     MySqlCommand sqlCommand = new MySqlCommand(sqlQuery, sqlConnection); 

     // Выполняем 
     try 
     { 
      sqlConnection.Open(); 

      MySqlDataReader sqlReader = sqlCommand.ExecuteReader(); 

      if (sqlReader.HasRows) 
      { 
       while (sqlReader.Read()) 
       { 
        resultPassword = sqlReader[2].ToString(); 
       } 
      } 
      else 
      { 
       resultPassword = ""; 
      } 
     } 

     catch (MySqlException sqlError) 
     { 
      errorMessage.Text = "Ошибка: " + sqlError.Message; 

      FileInfo errorLog = new FileInfo("errorLog.txt"); 

      if (errorLog.Exists == false) 
      { 
       FileStream errorFs = errorLog.Create(); 
       errorFs.Close(); 
      } 

      StreamWriter errorSw = errorLog.AppendText(); 

      errorSw.WriteLine(DateTime.Now + " | " + sqlError.Message); 
      errorSw.Close(); 
     } 

     finally 
     { 
      sqlConnection.Close(); 
     } 

     return resultPassword; 

    } 

여기서 variable은 할당되지 않았기 때문에 resultPassword를 반환 할 수 없습니다.

답변

2

선언

string resultPassword = null; 

아니면 그 경우

string resultPassword = String.Empty; 

로 선언 할 수 있습니다 당신이 정말 필요가 없기 때문에이 변수

else 
{ 
      resultPassword = ""; 
} 

암호 기본값은 가지고 있기 때문에 이미 선언에 설정되었습니다.

+0

답장을 보내 주신 모든 분들께 고맙습니다. – MyMomSaysIamSpecial

1

resultPassword은 함수 본문에 선언되어 있지만 try 블록 내부에서만 초기화되므로 예외가 발생하면 변수가 할당되지 않습니다.

try-catch 블록 외부에서 변수를 초기화하십시오.

일부 세부 사항 here. 그것은 루트가 있기 때문에

string resultPassword = ""; 

선언

0

컴파일러는 캐치로 이동하거나 마지막으로 그냥 할 경우 resultPassword 할당 결코 극복하는 기회가 (이 있음을 본다 resultPassword 값이 할당되지 않습니다 방법을 통해 다른 사람들이 말했듯이 선언 :.

string resultPassword = null; 
0

에 :.

0

나는

을 제안
string resultPassword = ""; 

그런 다음 찾을 수 없도록 설정해야하는 경우 실제로 "** 찾을 수 없음 **"또는 무엇인가를 설정하십시오. 그대로 변수가 설정되지 않은 코드 아래로 경로가 있습니다 - 예를 들어 catch 영역에 들어갑니다.

관련 문제