如何使用c#在参数中传递convert表达式?

如何使用c#在参数中传递convert表达式?,c#,tsql,C#,Tsql,我使用字符串生成器在c代码中创建了一个临时insert语句 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

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

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(24小时)”相同。
如何使用TSQL Convert表达式传递@datetime参数?

您可以使用
Convert
类。试试这样的

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


您可以使用
Convert
class。试试这样的

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


为什么不使用?

为什么不使用?

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


(换句话说,只需插入
DateTime。现在
,不要将其拆分为字符串)

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


(换句话说,只需插入
DateTime。现在
,不要将其拆分成字符串)

老实说,每当我需要在表中插入当前日期/时间戳时,我喜欢使用服务器日期而不是客户端日期。如果应用程序与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();
}

老实说,每当我需要在表中插入当前日期/时间戳时,我喜欢使用服务器日期而不是客户端日期。如果应用程序与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();
}

当您将该值分配给
@datetimestamp
时,为什么不在该点将其转换为datetime?然后,当您将值分配给
@datetimestamp
时,将完成转换,为什么不在该点将其转换为datetime?然后将进行转换日期格式应始终为yyyy-mm-dd。等于TSQL=convert(varchar,getdate(),120)--2016-10-23 06:10:55(24小时)
sqlcommand
只要数据类型是
datetime
表中的
DateTimeStamp
的数据类型是什么,就会自动为您处理它?那么我是否需要使用Convert.ToDateTime()?DateTimeStamp数据类型是datetimedatedate格式应该始终是yyyy-mm-dd。等于TSQL=Convert(varchar,getdate(),120)--2016-10-23 06:10:55(24小时)
sqlcommand
只要数据类型是
datetime
表中的
DateTimeStamp
的数据类型是什么?那么我是否需要使用Convert.ToDateTime()?DateTimeStamp数据类型是datetime