以dd-MM-yyyy格式插入日期

时间:2014-02-01 13:46:19

标签: c# sql-server datetime-format sqlcommand

我正在尝试以dd-MM-yyyy格式在c#中插入日期。插入查询是

SqlCommand cmd_cust = new SqlCommand(@"insert into custdetail values ('" + txtInvoiceNo.Text + "','" + txtCustomerName.Text + "','" + txt_contact.Text + "', '" + txtAddress.Text + "', '" + txt_total_amt.Text + "', '" + dt_date.Value.ToString("dd-MM-yyyy") + "')", con_create);
            con_create.Open();
            cmd_cust.ExecuteNonQuery();
            con_create.Close();

我创建了一个列名为date的表,数据类型为date。插入记录后,日期列字段中的值为yyyy-dd-MM格式。我想用dd-MM-yyyy格式。

2 个答案:

答案 0 :(得分:8)

不要尝试连接字符串以构建正确的sql命令 这只导致解析问题和Sql Injection Attacks 而是使用参数化查询

int isok = 0;
try 
{
    // Now your query is more readable and there are no more formatting problems here
    SqlCommand cmd_cust = new SqlCommand(@"insert into custdetail values
                         (@invNo,@custName,@contact,@address,@amount,@dt)", 
                         con_create);
    con_create.Open();
    cmd_cust.Parameters.AddWithValue("@invNo",txtInvoiceNo.Text );
    cmd_cust.Parameters.AddWithValue("@custName",txtCustomerName.Text );
    cmd_cust.Parameters.AddWithValue("@contact",txt_contact.Text);
    cmd_cust.Parameters.AddWithValue("@address",txtAddress.Text.Text);
    // The following parameter could require a conversion if the db field is not of text type
    // cmd_cust.Parameters.AddWithValue("@amount", Convert.ToDecimal(txt_total_amt.Text)); 
    cmd_cust.Parameters.AddWithValue("@amount", txt_total_amt.Text); 
    cmd_cust.Parameters.AddWithValue("@dt",dt_date.Value );
    isok= cmd_cust.ExecuteNonQuery();
    con_create.Close();
}

使用参数您不必担心如何将DateTime值格式化为字符串,您可以按照数据库字段的预期直接传递DateTime值。将此值正确传递给基础数据库表是框架作业。

对于像字符串那样的其他字段也是如此。如果您的用户在其中一个文本框中键入单引号,则会出现字符串连接的语法错误。您的用户键入的引用会错误地关闭该值,而将文本的其余部分保留为无效的sql文本
(例如textCustomerName.Text = O'Brian变为....,'O'Brian' ,....

答案 1 :(得分:0)

我同意史蒂夫的回答。但是,为了专注于您的具体问题,SQL不会以特定格式存储日期 - 它将其存储为两个整数(以二进制形式)。因此,您在查询窗口中看到的日期(或您正在查看的其他任何位置)无关紧要;同样,您尝试插入数据库的任何格式都无关紧要(只要SQL Server可以正确解析它)。如果您希望输出以某种方式显示,则可以重新格式化以满足SELECT查询的需要。 SQL和C#都有广泛的日期格式化方法。

您是在SQL查询输出或C#程序输出中格式化日期吗?