MySQL查询中的C#Set变量
我现在正在编写C#函数,它必须返回我的用户密码。一切都很好,但比我试图编译这个项目,而不是告诉我有关未分配变量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";
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 = "";
然后,如果您需要设置为“未找到”,请实际将其设置为“**未找到**”或其他内容。目前,您的代码中有未设置变量的路径-例如,它进入捕获区域。谢谢您和所有回答的人,这很有帮助!