我正在尝试以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
格式。
答案 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#程序输出中格式化日期吗?