c#
  • sql
  • datetime
  • 2015-09-04 62 views 3 likes 
    3

    注意:不關心連接會影響連接工作。 場數據庫DateTime我想在C#中的DateTimePicker對象的數據庫表中使用「Datetime」數據類型更新字段。

    DateTime dtc = Convert.ToDateTime(dateTimePicker1.Value.Date); 
    
    cmd = new SqlCommand("UPDATE LAB_TESTING set Lab_Nam='" + lab_id + "',Rslt_lb='" + 
            textBox1.Text + "',Tst_Dat='" + dtc + "' Where Lab_ID='" + 
            bindex + "'", con); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    MessageBox.Show("You Update recored successfully", "delete", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    dataGridView1.DataSource = null; 
    con.Close(); 
    readdatagrid1(); 
    

    運行程序後,我從字符串轉換日期和/或時間時,轉換失敗。

    回答

    0

    試試這個

    DateTime dtc = Convert.ToDateTime(dateTimePicker1.Value.ToString("dd/MM/yyyy")); 
    

    否則

    ,你也可以做到這一點

    DateTime dtc = Convert.ToDateTime(dateTimePicker1.Text) 
    

    如果你與你的SQL代碼得到這個錯誤不是有look here

    +0

    我使用了上面提出的兩個代碼,但沒有工作,也得到了這條消息「轉換日期和/或時間從字符串轉換失敗。」 – wittyse

    +0

    Letz嘗試這個'DateTime.ParseExact(dateTimePicker1.Text)' –

    +0

    順便說一句,你在'DateTime dtc = Convert中得到這個錯誤。ToDateTime(...)'行或其他地方 –

    0

    這將爲你工作。

    var date = (DateTime)dateTimePicker1.SelectedDate.Value; 
    
    +0

    dosent因爲(日期)和SelectedDate下有紅線而工作。 – wittyse

    +0

    我已經將(日期)更改爲(日期時間),因此請嘗試。 – Hedego

    1

    不要使用字符串連接來建立查詢(SQL injection alert,也read this!)。使用parameterized queries。至於你的問題:格式化日期爲yyyy-MM-ddISO 8601),它會工作。

    如果您已經正確使用了參數化查詢,您可以按照原樣傳入DateTime,並且驅動程序可以確保將值正確傳遞到SQL,無論「格式」/區域設置/任何因爲該值將作爲DateTime而不是字符串傳遞。事情是這樣的:

    cmd = new SqlCommand(@"UPDATE LAB_TESTING set Lab_Nam = @labnam, 
              Rslt_lb = @result, Tst_Dat = @tstdat 
              Where Lab_ID = @id", con); 
    
    cmd.Parameters.AddWithValue("@labnam", lab_id); 
    cmd.Parameters.AddWithValue("@result", textBox1.Text); 
    cmd.Parameters.AddWithValue("@tstdat", dateTimePicker1.Value.Date); 
    cmd.Parameters.AddWithValue("@id", bindex); 
    
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    

    除此之外我還建議包裹concmdusing() { ... }語句,這樣你可以肯定這個東西得到妥善處理,並且你給你的變量和字段名體面的名稱和用途一致的命名方案。

    後,我現在重複:

    • 我將永遠,永遠,運行查詢一次已字符串連接在一起了!

    • 從現在開始,我將使用參數化查詢

    • 如果我需要以後再運行字符串連接在一起的查詢我會確保所有值是逃脫正確

    重複上述大聲,至少50次。

    +0

    拒絕「AddWithValue」,因爲它在行下變爲紅色。 – wittyse

    +0

    '在線下有紅色......再次:告訴我們確切的錯誤。 「紅線」可能是任何事情。您的錯誤窗口(或將鼠標懸停在帶下劃線的代碼上)將顯示實際錯誤。另請注意,我將上面的代碼編寫爲**示例**。您可能需要將其更改爲您的需求或...我不知道...也許可以參考[文檔](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection。 addwithvalue(v = vs.110).aspx)進行更改? – RobIII

    +0

    錯誤是「沒有爲AddWithValue定義」 – wittyse

    相關問題