将日期转换为C#的日期时间格式

5
我有一个转换日期时间的问题,但我不知道自己犯了哪个错误。 我认为应该在同一 SQL 查询中将日期格式化以使其被识别。 这是我设置断点时得到的结果: enter image description here 这是基地的结果: enter image description here 以下是我发送数据的代码:
var arravialDates = dataAccess.get_dates(userID, date, DateTime.DaysInMonth(date.Year, date.Month)); //get dates for user

//working hours

DateTime dateH = new DateTime(2099, 12, 12, 0, 0, 0);
bool hasDate = false;
for (int i = 0; i < arravialDates.Count; i++)
{
     var arravial = dataAccess.getPraesenzzeit(arravialDates[i], userID);
     int index = 0;
}

5
停止使用那种建立 SQL 的方式,改用参数化 SQL。这样做不仅可以解决转换问题,还可以避免 SQL 注入攻击。 - Jon Skeet
1
日期在C#或SQL中没有格式,它们是二进制值。将DateTime实例作为参数传递给参数化查询。如果您不想直接使用ADO.NET和SqlCommand,则可以使用像Dapper这样的微ORM。 - Panagiotis Kanavos
2
顺便说一句,不要发布导致问题的代码图像,而是发布代码本身。不要强迫别人重新输入代码以检查或发布修复程序。 - Panagiotis Kanavos
2个回答

5

您的截图显示了一个.Query<>方法。 SqlConnection没有Query方法。

Dapper是一种微型ORM,用于使编写参数化查询更加简单。使用Dapper或任何其他ORM时,无需使用字符串插值或连接。只需编写:

var output=connection.Query<PRAESENZZEIT>(
                "select * from Z_PRAESENZZEIT " + 
                "where ZPZ_Datum = @date and ZPZ_LPE_ID= @id "
                "order by ZPZ_ID_ASC", 
                new {date=DatTime.Today,id=1});

更好的做法是:
var query = "select * from Z_PRAESENZZEIT " + 
            "where ZPZ_Datum = @date and ZPZ_LPE_ID= @id "
            "order by ZPZ_ID_ASC", 

var output=connection.Query<PRAESENZZEIT>(query,new {date=date,id=userid});

3
你的做法是错误的。你绝不能通过字符串拼接来创建SQL语句。这样会让你容易受到SQL注入攻击,在不同系统上会遇到格式问题,并且会对查询解析器的性能产生很大影响。
解决方案是使用参数化查询:你需要添加一个占位符来表示参数,并通过命令参数来添加值。
你的SQL应该像这样:where ZPZ_Datum = @zpzdate,然后你需要用名称zpzdate添加一个参数:command.Parameters.Add("@zpzdate", arravial);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接