1

私は今、ユーザーパスワードを返さなければならない C# 関数を書いています。すべて問題ありませんが、このプロジェクトをコンパイルしようとしているよりも、VSが割り当てられていない変数について教えてくれます。

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;

    }   

ここでは、変数が割り当てられていないため、resultPassword を返すことができません:|

4

5 に答える 5

2

この変数を次のように宣言します。

string resultPassword = null;

または、次のように宣言できます

string resultPassword = String.Empty;

その場合、あなたは本当に必要ありません

else
{
            resultPassword = "";
}

宣言時にパスワードのデフォルト値が設定されているためです。

于 2012-07-03T09:54:13.667 に答える
1

resultPassword関数本体で宣言されていますが、ブロック内でのみ初期化されているtryため、例外が発生した場合、変数は割り当てられません。

try-catchブロック外で変数を初期化します。

詳細はこちら

于 2012-07-03T09:55:08.853 に答える
0

コンパイラーは、resultPassword が割り当てられない可能性があることを認識します (Catch または Final に入ると、次のようにします。

string resultPassword = ""; 

宣言で

于 2012-07-03T09:55:33.117 に答える
0

これは、resultPassword に値が割り当てられないメソッドのルートがあるためです。他の人が言ったように、次のように宣言します。

string resultPassword = null;
于 2012-07-03T09:55:40.220 に答える
0

私は提案します

string resultPassword = ""; 

次に、not found に設定する必要がある場合は、実際に「** not found **」などに設定します。現状では、変数が設定されていないコードのパスがあります-たとえば、キャッチ領域に入ります。

于 2012-07-03T09:55:59.567 に答える