簡體   English   中英

如何在SQL Server中使用“日期”數據類型

[英]How to use the 'date' data type in SQL Server

我目前正在嘗試使用Visual Studio在c#中創建一個asp.net Web應用程序。 我有一個頁面充當家長或孩子的注冊頁面,具體取決於您選擇的單選按鈕。 注冊孩子時,需要從三個單獨的下拉列表中輸入DOB。 就目前而言,我在數據庫中將DOB數據類型設置為varchar ,這意味着05/05/2005的DOB在表中'552005''552005'

當我將數據類型設置為datedatetime ,會引發此錯誤:

System.Data.dll中發生類型為'System.Data.SqlClient.SqlException'的異常,但未在用戶代碼中處理。其他信息:從字符串轉換日期和/或時間時轉換失敗。

這是否意味着我必須將字符串解析為代碼中某個地方的整數? 如果是這樣,它到底需要在代碼中的位置如何? 我將在代碼中包含一些屏幕截圖。

提前致謝!

顯示表格的外觀以及DOB當前在表格中的存儲方式

protected void submitBtn_Click(object sender, EventArgs e)
{
    SqlConnection connect = new SqlConnection("Data Source=THEBEAST;Initial Catalog=newregDB;Integrated Security=True;Pooling=False");

    if (parentRadBtn.Checked)
    {
        if (firstNameBox.Text == "" || surnameBox.Text == "" || postcodeBox.Text == "" || teleBox.Text == "" || emailBox.Text == "" || userBox.Text == "" || passwordBox.Text == "")
        {
            Response.Write("<script>alert('Please ensure all fields have an entry');</script>");
            successLabel.Text = ("");
            userBox.Text = "";
            firstNameBox.Text = "";
            surnameBox.Text = "";
            postcodeBox.Text = "";
            teleBox.Text = "";
            emailBox.Text = "";
            passwordBox.Text = "";
        }
        else
        {
            SqlCommand pa = new SqlCommand("INSERT INTO parent(parentID, firstname, surname, postcode, telephone, email, password) VALUES (@parentID, @firstname, @surname, @postcode, @telephone, @email, @password)", connect);
            pa.Parameters.AddWithValue("@parentID", userBox.Text);
            pa.Parameters.AddWithValue("@firstname", firstNameBox.Text);
            pa.Parameters.AddWithValue("@surname", surnameBox.Text);
            pa.Parameters.AddWithValue("@postcode", postcodeBox.Text);
            pa.Parameters.AddWithValue("@telephone", teleBox.Text);
            pa.Parameters.AddWithValue("@email", emailBox.Text);
            pa.Parameters.AddWithValue("@password", passwordBox.Text);

            connect.Open();
            pa.ExecuteNonQuery();
            connect.Close();
        }

        if (IsPostBack)
        {
            userBox.Text = "";
            firstNameBox.Text = "";
            surnameBox.Text = "";
            postcodeBox.Text = "";
            teleBox.Text = "";
            emailBox.Text = "";
            passwordBox.Text = "";
        }
    }           
    else if (childRadBtn.Checked)
    {
        if (firstNameBox.Text == "" || dayDobList.Text == "" || monthDobList.Text == "" || yearDobList.Text == "" || genderList.Text == "" || userBox.Text == "" || passwordBox.Text == "")
        {
             Response.Write("<script>alert('Please ensure all fields have an entry');</script>");
             successLabel.Text = ("");
             userBox.Text = "";
             firstNameBox.Text = "";
             dayDobList.Text = "";
             monthDobList.Text = "";
             yearDobList.Text = "";
             genderList.Text = "";
             passwordBox.Text = "";
         }
         else
         {
             SqlCommand ca = new SqlCommand("INSERT INTO children(childID, firstname, dob, gender, password) VALUES (@childID, @firstname, @dob, @gender, @password)", connect);
             ca.Parameters.AddWithValue("@childID", userBox.Text);
             ca.Parameters.AddWithValue("@firstname", firstNameBox.Text);
             ca.Parameters.AddWithValue("@dob", dayDobList.Text +  monthDobList.Text +  yearDobList.Text);
             ca.Parameters.AddWithValue("@gender", genderList.Text);
             ca.Parameters.AddWithValue("@password", passwordBox.Text);

             connect.Open();
             ca.ExecuteNonQuery();
             connect.Close();
         }

         if (IsPostBack)
         {
             userBox.Text = "";
             firstNameBox.Text = "";
             dayDobList.Text = "";
             monthDobList.Text = "";
             yearDobList.Text = "";
             genderList.Text = "";
             passwordBox.Text = "";
         }              
     }
 }

需要約會,請約會:

new DateTime(int.Parse(dayDobList.Text), 
             int.Parse(monthDobList.Text), 
             int.Parse(yearDobList.Text))

您的問題是您的表中有一些舊格式為'552005' ,因此當您想更改列類型時會出錯。 因此,您有兩種選擇:

1-從該表中刪除任何內容,更改列類型,然后開始將日期保存為datetimedatetime2

2-將所有當前數據轉換為日期字符串,例如 '05/05/2005 00:00:00' ,然后將列類型更改為datetime

更新:

同樣不要忘記將數據類型添加到SqlParameters中:

SqlParameter dob = new SqlParameter("@sinceDateTime", SqlDbType.DateTime);
dob.Value = new DateTime( Int32.Parse(yearDobList.Text), Int32.Parse(monthDobList.Text), Int32.Parse(dayDobList.Text));
ca.Parameters.Add(dob);

暫無
暫無

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

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