将字符串转换为datetime的问题

pfi*_*rno 4 c# sql-server asp.net datetime

我在ms-sql数据库中有一个表,其中包含列中的日期,如下所示:

2012-10-31 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

此列列为"datetime"类型.如同在ms sql server管理工作室中,我展开表,然后是列,并查看日期(PK,datetime,not null).

然后在c#中,我得到那些带有语句的日期,并将其分配给一个变量,该变量填充了一个网页,该网页是用asp.net制作的网页.sql语句只是获取用户的最后一个条目.

        SqlCommand command = new SqlCommand();
        //connection info here
        sql2 = "select max(day) as day from users u join days d on d.User_ID = u.id where u.ActiveUser = 1 and u.id = " + Users["ID"].ToString();;
        command.CommandText = sql2;
        dates["Entry"] = command.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

这将填充列中的日期,如下所示:

10/31/2012 12:00:00 AM
Run Code Online (Sandbox Code Playgroud)

现在,我不知道为什么会这样转换.我在调试时跟踪数据,并且使用command.ExecuteScalar()函数进行更改.我希望的格式是:

10/31/2012
Run Code Online (Sandbox Code Playgroud)

没有hh/mm/ss AM.

我无法使任何DateTime转换/分析/格式化正常工作.我花了四天时间.我在这里问了一个类似的问题:将日期转换为正确的格式,尝试所有不同的建议.

我在此期间做的是:

string dt = command.ExecuteScalar().ToString();
dt = dt.Substring(0, dt.IndexOf(" ") + 1); 
dates["Entry"] = dt;
Run Code Online (Sandbox Code Playgroud)

哪个删除了返回的日期字符串中的空格后的所有文本.这没关系,除了我想比较我得到的这些日期,所以我需要在DateTime中使用它们.试图将这些字符串转换为DateTime是行不通的.

编辑:定义和类型 -

DataRow dates;
//for loop here going through for each user
dates = _dtuserhours.NewRow(); // _dtuserhours is a DataTable
//Sql statements here
_dtuserhours = new DataTable("newtable");
DataColumn column;
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "Entry";
_dtUserHours.Columns.Add(column);
Run Code Online (Sandbox Code Playgroud)

The*_*nja 5

首先,您需要更改SQL字符串以使用命令参数,否则您将接受SQL注入攻击.

接下来,您可以在SQL Server中对DateTime字段的输出进行整形,以输出您要查找的格式.您获得的是DateTime的默认格式,具体取决于您的文化.

或者,您可以轻松地使用返回的DateTime对象的字符串formatter属性,如下所示:

dates["Entry"] = ((DateTime)command.ExecuteScalar()).ToString("MM/dd/yyyy");
Run Code Online (Sandbox Code Playgroud)

编辑:改为尝试:

dynamic result = command.ExecuteScalar();
dates["Entry"] = result.ToString("MM/dd/yyyy");
Run Code Online (Sandbox Code Playgroud)

编辑EDIT - 设置为动态,因为编译器不知道ExecuteScalar在编译时返回什么.