1

我使用字符串生成器在 c# 代码中创建了一个临时插入语句。

var str = new StringBuilder(string.Empty);
str.Append(" INSERT INTO Table_01 ( ID,");
        str.Append("Comment,");
        str.Append("DateTimeStamp,");
str.Append(" ) VALUES( ");
        str.Append("'" + Guid.NewGuid() + "',");
        str.Append("'" + CaseComment + "',");
        str.Append("CONVERT(DATETIME, '" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "',120)");

我已将此代码转换为 SqlParameter:-

var str = INSERT INTO Table_01(ID,Comment,DateTimeStamp)     
VALUES(@ID,@Comment,@DateTimeStamp)
using (var cmd = new SqlCommand(str, con))
{
cmd.Parameters.Add(new SqlParameter("@ID", Guid.NewGuid()));
cmd.Parameters.Add(new SqlParameter("@Comment", CaseComment));
cmd.Parameters.Add(new SqlParameter("@DateTimeStamp", ?????));
cmd.ExecuteNonQuery();
}

在传递 DateTime 之前,我必须确保格式等于 TSQL 中的“ convert(varchar, getdate(), 120) -- 2016-10-23 06:10:55(24h) ”。我将如何使用 TSQL 转换表达式传递 @datetime 参数?

4

4 回答 4

1

假设数据库列实际上是 aDateTime而不是varchar,如果使用参数,则不需要在插入时进行转换。数据库不会将日期保存为字符串,而是保存为偏移量,而在使用内联 SQL 时必须转换它的唯一原因是因为您必须确保数据库将字符串识别为 aDateTime以便它可以在内部正确地将其转换回来。使用参数可以避免这种情况。

(换句话说,只需 insert DateTime.Now,不要将其撕成字符串)

于 2012-08-30T15:59:08.297 回答
1

为什么不对DateTime 使用字符串格式

于 2012-08-30T15:22:40.367 回答
1

老实说,每当我需要将当前日期/时间戳插入表时,我喜欢使用服务器日期而不是客户端日期。如果应用程序与 SQL Server 运行在同一个机器上,那没关系,但如果应用程序运行在不同的机器上,那么最好在同一个时区有一致的日期。因此,我将完全删除 datetime 参数并使用 SQL 日期函数 GetDate(),如下所示:

var str = INSERT INTO Table_01(ID,Comment,DateTimeStamp)     
VALUES(@ID,@Comment,GetDate())
using (var cmd = new SqlCommand(str, con))
{
cmd.Parameters.Add(new SqlParameter("@ID", Guid.NewGuid()));
cmd.Parameters.Add(new SqlParameter("@Comment", CaseComment));
cmd.ExecuteNonQuery();
}
于 2012-08-30T16:08:44.103 回答
1

你可以使用Convert类。试试这样的,

cmd.Parameters.Add(new SqlParameter("@DateTimeStamp", Convert.ToDateTime(DateTime.Now)));

或者

cmdItemSearch.Parameters.Add(new SqlParameter("@EndDate", SqlDbType.DateTime)); 
cmdItemSearch.Parameters["@EndDate"].Value = DateTime.Now;
于 2012-08-30T15:20:25.617 回答