2013-08-16 50 views
0

我有一個windows應用程序,我已經使用日期時間選擇器來進行轉換開始和轉換結束。我必須將這些時間表插入表中。我的代碼是:在c#中只插入sql表中的時間#

if (comboBox1.SelectedIndex == 0 || comboBox1.SelectedIndex == 1 || comboBox1.SelectedIndex == 2 || comboBox1.SelectedIndex == 3 || comboBox1.SelectedIndex == 4 || comboBox1.SelectedIndex == 5 || comboBox1.SelectedIndex == 6 || comboBox1.SelectedIndex == 7 || comboBox1.SelectedIndex == 8 || comboBox1.SelectedIndex == 9 || comboBox1.SelectedIndex == 10 || comboBox1.SelectedIndex == 11 || comboBox1.SelectedIndex == 12 || comboBox1.SelectedIndex == 13 || comboBox1.SelectedIndex == 14 || comboBox1.SelectedIndex == 15 || comboBox1.SelectedIndex == 16) 
{ 
    string Query = " Insert into [ICPS].[dbo].[Cau reports]([Name],[Date],[Shift Start],[Shift END ],[Overtime Start],[Overtime End],[Tasks Carried Out],[Normal ],[Overtime],[Normal 1],[Overtime1],[Comments],[Targets_(per hour)]) values ('" + this.textBox1.Text + "','" + this.Date.Text + "', CONVERT(VARCHAR(5),'" + this.SS.Text + "',108), '" + this.SE.Text + "','" + this.OS.Text + "','" + this.OE.Text + "','" + this.comboBox1.SelectedText + "','" + this.NT.Text + "','" + this.OT.Text + "','" + this.textBox2.Text + "','" + this.textBox3.Text + "','" + this.textBox4.Text + "','" + this.textBox5.Text + "') ;"; 

    // string Query = " update [ICPS].[dbo].[Cau reports] set [Normal]='" + this.textBox7.Text + "',[Overtime]='" + this.textBox8.Text + "',[Normal 1]='" + this.textBox2.Text + "',[Overtime1]='" + this.textBox3.Text + "',[comments]='" + this.textBox4.Text + "',[Targets_(per hour)]='" + this.textBox5.Text + "'where [Tasks Carried Out] ='" + this.comboBox1.SelectedText + "'; "; 

    SqlConnection conDatabase = new SqlConnection(constring); 
    SqlCommand cmdDataBase = new SqlCommand(Query, conDatabase); 
    SqlDataReader myReader; 

    try 
    { 
     conDatabase.Open(); 
     myReader = cmdDataBase.ExecuteReader(); 
     MessageBox.Show("Saved"); 

     while (myReader.Read()) 
     { 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

但我的輸出來了:01/01/1900 16:36(我不需要在換擋開始日期和結束轉變僅僅只有一次)。任何幫助將非常感激。請...

+2

您使用什麼數據類型將時間存儲在底層的Cau_reports表中? – SteveChapman

+0

此外,有點題外話,但我建議你考慮使用SqlCommand&參數 – SteveChapman

+1

http://xkcd.com/327/ – idstam

回答

3

確保您正在使用適當的SQL Server time類型的數據列。

+0

我有日期時間類型在SQL和我的Windows應用程序窗體我有日期時間採樣與格式的時間,所以,我有他們的時間.. CONVERT(VARCHAR(5),'「+ this.SS.Text +」',108 )= for shift start給了我這個o/p 01/01/1900 16:36 –

+1

@kiranv:如果你在SQL Server表中有'DATETIME',那麼你總是**會同時擁有一個日期和一個時間。你無法避免這種情況。如果你只需要**時間**,那麼使用適當的數據類型 - 'TIME(3)'或類似的東西! –

+0

嗨馬克,你是對的..但SQL服務器管理工​​作室沒有時間數據類型,這是我第一次尋找的東西。 –

0

試試這個

CONVERT(VARCHAR(8),'" + this.SS.Text + "',108) 

108回hh:mm:ss

0
cast('" + this.SS.Text + "' as time) 

convert(char(5), '" + this.SS.Text + "', 108) 

CONVERT(VARCHAR(8),'" + this.SS.Text + "',108) 

CONVERT(TIME,'" + this.SS.Text + "') 

OR

在查詢中使用它之前,您只需將您的DateTimePicker值如下

DateTimePicker1.Value.ToShortTimeStringDateTimePicker1.Value.tostring("HH:mm:ss")

+0

否仍然我在表中得到日期.. –

+0

您是否曾嘗試在查詢中使用它之前更改datetimepicker值。請看我的更新。 –

+0

我試過了,但還是一樣 –

0

如果您使用的是SQL Server 2008或更高版本,你可以使用TIME數據類型只存儲一次。如果您使用的是較早版本 - 您的最佳選擇是一個DATETIME數據時間,它將包含一個您可以忽略的日期組件。無論什麼消耗您的數據可以隨時顯示它並忽略日期。

另一種選擇是將時間存儲爲字符串,但如果您需要進行任何比較或日期數學計算,則可能比它的價值更麻煩。

+0

我不能看到時間數據類型除了(時間戳),這與我的情況沒有任何關係我使用的日期時間,我試圖忽略日期,只是顯示時間,但我努力顯示它。我嘗試了幾種方法,但仍然沒有運氣。 –