MySQL查询中的C#Set变量

MySQL查询中的C#Set变量,c#,mysql,C#,Mysql,我现在正在编写C#函数,它必须返回我的用户密码。一切都很好,但比我试图编译这个项目,而不是告诉我有关未分配变量 string sqlLoginCheck (string userId) { string database, host, user, pass, sqlParams, sqlQuery; string resultPassword; database = "db"; host = "localhost";

我现在正在编写C#函数,它必须返回我的用户密码。一切都很好,但比我试图编译这个项目,而不是告诉我有关未分配变量

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,因为变量未赋值:|

将此变量声明为

string resultPassword = null;
或者你可以把它声明为

string resultPassword = String.Empty;
那样的话,你真的不需要

else
{
            resultPassword = "";
}

因为在声明时已经设置了密码的默认值。

在函数体中声明了
resultPassword
,但它仅在
try
块中初始化:因此,在异常情况下,变量将被取消分配

try catch
块外初始化变量


一些细节。

编译器发现有可能永远不会分配resultPassword(如果您进入Catch或Finally。只需执行以下操作:

string resultPassword = ""; 

在声明中

这是因为方法中有一个根,resultPassword从未被赋值。正如其他人所说,声明:

string resultPassword = null;
我建议

string resultPassword = ""; 

然后,如果您需要设置为“未找到”,请实际将其设置为“**未找到**”或其他内容。目前,您的代码中有未设置变量的路径-例如,它进入捕获区域。

谢谢您和所有回答的人,这很有帮助!