簡體   English   中英

c#注冊表格:可選文本框

[英]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時向數據庫中插入nullnothing插入,可以傳遞如下參數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM