C# 注册表单:可选文本框



我正在做一个需要注册选项的项目。我已经创建了一个用户可以填写的表单,如果每个文本框都已填写,则它已成功保存到数据库中。我需要让其中一些是可选的。

private void button1_Click(object sender, EventArgs e)
{
Registercar(textBox1.Text, textBox2.Text, Convert.ToInt32(textBox3.Text));
}
private static void Registercar(string make, string model, int year)
{
var con = GetConnection();
try
{
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO user_car (ID,make,model,year) VALUE (@ID, @make, @model, @year)";
cmd.Prepare();
cmd.Parameters.AddWithValue("@ID", 0);
cmd.Parameters.AddWithValue("@make", make);
cmd.Parameters.AddWithValue("@model", model);
cmd.Parameters.AddWithValue("@year", year);
cmd.ExecuteNonQuery();
if (con !=null) { con.Close(); };
MessageBox.Show("Car successfully registered");
}
catch (Exception ex)
{
MessageBox.Show(Convert.ToString(ex));
}
finally
{
con.Close();
}
}

上面的代码是注册的一部分,用户可以选择注册将与其帐户绑定的汽车。如果他们选择添加汽车,则需要输入品牌和型号,而年份是可选的。如果他们输入所有信息,它就会成功地将信息保存到数据库中。

但是,如果我尝试将"年份"选项留空,则会出现以下错误: "mscorlib 中发生了类型为'System.FormatException'的未处理异常.dll

其他信息:输入字符串的格式不正确。

这告诉我,我很可能不允许将其留空。我试图找出不同的选项,我可以将其留空,但仍将其他信息保存到数据库中。 我尝试的第一个选项来自这篇文章: 我们如何在 C#.net 中声明可选参数? 我试图通过向我的 Year 参数输入默认值来使年份可选:

private static void Registercar(string make, string model, int year = 0)

但是我仍然收到与以前相同的错误。我尝试的下一个选项来自这篇文章: 如何在 C# 中使用可选参数? 第一个答案与上一个答案相同,将参数设置为设定值。另一个答案建议使用"System.Runtime.InteropServices"并将参数设置为[可选]。我试过了,但遇到了和以前一样的错误。 我认为这与我尝试将空字符串转换为 int 的事实有关。快速搜索将我带到了这篇文章: 将字符串转换为整数 在这里,我被告知我可以尝试使用 int。解析,所以我像这样设置

private void button1_Click(object sender, EventArgs e)
{
int year = int.Parse(textBox3.Text.Trim());
Registercar(textBox1.Text, textBox2.Text, year);
}

和以前一样的错误。 接下来,我尝试了"Int32.TryParse()",它检查字符串是否包含整数,如果没有,则输出一个整数值

private void button1_Click(object sender, EventArgs e)
{
int year;
string str = textBox3.Text.Trim();
Registercar(textBox1.Text, textBox2.Text, Int32.TryParse(str, out year);
}

现在它告诉我我无法从"bool"转换为"int">

在这一点上,我几乎已经放弃了。

目前有效的方法是,如果填写了每个框,它就会成功地将信息保存到数据库中。但是,我需要一些文本框是可选的,但我无法使其工作。

我很抱歉写了很长的帖子。我希望有人能够提供帮助或提出建议:)

如果我错了,请纠正我,但我认为您唯一的问题是将文本转换为字符串。在这里,将某些参数设置为可选并不是必需的。

int.TryParse()是一条路,但你用错了。TryParse返回bool这意味着转换是成功的(值true)或不成功(值false)。整数值位于变量out。因此,要在您的情况下使用它,请尝试以下操作:

private void button1_Click(object sender, EventArgs e)
{
int year;
string str = textBox3.Text.Trim();
//if parsing isn't successful, year will be set as 0
if (!int.TryParse(str, out year))
{
//notice user that that isn't correct value for year
year = 0;
}
//no need for else, year now contains int value but beware, it can be value from 0  to 2147483647
Registercar(textBox1.Text, textBox2.Text, year));
}

如果您对"可选"参数或该year值的其他处理有其他疑问,请随时提问。或者,编辑您的原始问题。

编辑:

如果年份 == 0,要将nullnothing插入数据库,您可以传递如下参数:

if (year != 0)
cmd.Parameters.AddWithValue("@year", year);
else
cmd.Parameters.AddWithValue("@year", DBNull.Value);

使用 int。尝试解析方法检查年份是否是这样的实数

int nYear=0;
if(int.TryParse(txtYear.Text, out nYear)
{
//the value is a number
//Also the nYear vairable has the numeric integer value
//    you can use it
}
else
{
//The value isn't a number
}

最新更新