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

时间:2015-12-14 15:15:29

标签: c# mysql database radio-button

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

这是我的代码:

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!");

    }

3 个答案:

答案 0 :(得分:1)

如果您的条件都没有通过,则必须为gender提供默认值。虽然在您的应用程序中可能不会发生这种情况,但编译器并不够聪明,无法知道。所以写下这个:

string gender = string.Empty;

另外用if替换第二个else语句:

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

甚至更短时间使用ternary operator

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

因此gender始终被初始化。

答案 1 :(得分:1)

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

编译器无法知道这一点。它永远不会确保gender 实际已初始化。这就是为什么你需要在使用它之前初始化你的局部变量。编译器给出了这个错误,因为它试图防止出错。

作为Eric Lippert said;

  

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

将其指定为;

string gender = "";

还有一些事情;

答案 2 :(得分:1)

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

您可以将性别字符串初始化为string.Empty。或者最好你可以改变逻辑以使用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");
        }