从c#中仅在sql表中插入时间

时间:2013-08-16 11:46:09

标签: c# sql sql-server datetime

我有一个Windows应用程序,其中我使用了日期时间选择器用于班次开始和班次结束。我必须将这些时间插入表中。我的代码是:

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(我不需要在轮班开始和轮班结束时只有时间)。非常感谢你的帮助。请...

4 个答案:

答案 0 :(得分:3)

确保为数据列使用适当的SQL Server time类型。

答案 1 :(得分:0)

试试这个

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

108返回hh:mm:ss

答案 2 :(得分: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")

答案 3 :(得分:0)

如果您使用的是SQL Server 2008或更高版本,则可以使用TIME数据类型来存储一段时间。如果您使用的是早期版本 - 您最好的选择是DATETIME数据时间,它将具有您可以忽略的日期组件。无论使用,您的数据始终只能将其显示为时间并忽略日期。

另一个选择是将时间存储为字符串,但如果你需要进行任何比较或数学日期,那么它可能比它的价值更麻烦。