使用未分配的本地变量(插入数据库)
本文关键字:变量 插入 数据库 分配 | 更新日期: 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
语句处理您的连接和命令 - 在执行命令之前,仅打开连接