[英]c# Register form: Optional text boxes
我正在一個需要注冊選項的項目中。 我已經創建了一個表單,供用戶填寫,如果每個文本框均已填寫,則該表單可以成功保存到數據庫中。 我需要其中一些是可選的。
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();
}
}
上面的代碼是注冊的一部分,用戶可以選擇注冊與自己的帳戶相關聯的汽車。 如果選擇添加汽車,則需要輸入品牌和型號,而年份是可選的。 如果他們輸入了所有信息,它將成功地將信息保存到數據庫中。
但是,如果我嘗試將Year選項保留為空白,則會出現以下錯誤:“ mscorlib.dll中發生了'System.FormatException'類型的未處理異常
其他信息:輸入字符串的格式不正確。”
這告訴我,很可能不允許我將其留空。 我試圖找出其他選項,可以將其留空,而仍將其他信息保存到數據庫中。 我嘗試的第一個選項來自這篇文章: 我們如何在C#.net中聲明可選參數? 我試圖通過向Year參數輸入默認值來使year為可選:
private static void Registercar(string make, string model, int year = 0)
但是我仍然得到和以前一樣的錯誤。 我嘗試的下一個選項來自這篇文章: 如何在C#中使用可選參數? 第一個答案與前一個答案相同,將參數設置為設定值。 進一步的答案是建議使用“ System.Runtime.InteropServices”並將參數設置為[Optional]。 我嘗試過,但收到的錯誤與以前相同。 我認為這與我嘗試將字符串轉換為空並轉換為int有關。 快速搜索將我帶到了這篇文章: 將字符串轉換為整數在這里,我被告知可以嘗試使用int.Parse,因此我將其設置為
private void button1_Click(object sender, EventArgs e)
{
int year = int.Parse(textBox3.Text.Trim());
Registercar(textBox1.Text, textBox2.Text, year);
}
與以前相同的錯誤。 接下來,我嘗試了“ Int32.TryParse()”,它檢查字符串是否包含int,如果不包含,則輸出整數值
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方法檢查年份是否為像這樣的實數
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
}
如果我錯了,請糾正我,但是我認為您唯一的問題就是將文本轉換為字符串。 此處實際上並不需要將某些參數設置為可選。
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
價值的其他處理有其他疑問,請隨時提出。 或者,編輯您的原始問題。
編輯:
要在year == 0時向數據庫中插入null
或nothing
插入,可以傳遞如下參數:
if (year != 0)
cmd.Parameters.AddWithValue("@year", year);
else
cmd.Parameters.AddWithValue("@year", DBNull.Value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.