使用未分配的本地变量(插入数据库)

本文关键字:变量 插入 数据库 分配 | 更新日期: 2023-09-27 18:26:47

我正在创建一个小程序,其中单选按钮的值将被添加到数据库中(性别:男性和女性。)但它在必须插入数据库的"性别"上有一个错误,说"使用未分配的局部变量"。任何帮助都将不胜感激。

这是我的代码:

private void button1_Click(object sender, EventArgs e)
    {
        Connection();
        sql_connect.Open();
        try
        {

            string gender;
            if (radioButton_Female.Checked)
            {
                gender = "Female";
            }
            if (radioButton_Male.Checked)
            {   
                gender = "Male";
            }
            sql_command = new MySqlCommand("insert into tbl_sample (gender) values ('" + gender + "')", sql_connect); //here
            sql_command.ExecuteNonQuery();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        sql_connect.Close();

        MessageBox.Show("Added!");
    }

使用未分配的本地变量(插入数据库)

如果没有任何条件通过,则必须为gender提供默认值。尽管这可能不会在应用程序中发生,但编译器还不够聪明,无法知道这一点。所以写这个:

string gender = string.Empty;

else:替换第二个if-语句

if (radioButton_Female.Checked)
{
    gender = "Female";
}
else
{   
    gender = "Male";
}

或者使用三元运算符更短:

string gender = radioButton_Female.Checked ? "Female" : "Male"

因此CCD_ 4一直被初始化。

如果您继续执行代码,则可能无法分配字符串性别。如果未选中radioButton_Male和radioButto_Female。这在UI的逻辑中可能是不可能的,但从编译器的角度来看是可能的。

您可以将性别字符串初始化为类似字符串的字符串。空的或者,最好您可以更改逻辑以使用if-else结构。例如:

        string gender = string.Empty;
        if (radioButton_Female.Checked)
        {
            gender = "Female";
        }else if (radioButton_Male.Checked)
        {   
            gender = "Male";
        }else
        {
            throw new Exception("Error msg");
        }

如果您的两个单选按钮都未选中,该怎么办?在这种情况下gender是什么?

编译器无法知道这一点。它可以永远确保gender实际上已初始化。这就是为什么在使用本地变量之前需要对其进行初始化。编译器之所以会出现此错误,是因为它试图防止出错。

正如埃里克·利珀特所说;

使用未分配的局部变量可能是一个错误,这可能是由编译器以低成本检测到。

将其分配为;

string gender = "";

还有几件事;

  • 您应该始终使用参数化查询。这种字符串串联对SQL注入攻击是开放的
  • 使用using语句处理您的连接和命令
  • 在执行命令之前,仅打开连接