如何使用SqlDataReader在C#中格式化日期
我有一个控制台项目,它从数据库中检索一些数据。它正在使用连接字符串。当我运行项目时,我得到的日期是如何使用SqlDataReader在C#中格式化日期,c#,sql,date-format,C#,Sql,Date Format,我有一个控制台项目,它从数据库中检索一些数据。它正在使用连接字符串。当我运行项目时,我得到的日期是1/1/2010 12:00:00 AM,但我只想得到日期,比如1/1/2010 代码如下所示: string sql = "SELECT * FROM Employees"; SqlCommand cmd = new SqlCommand(sql, sqlConnection); SqlDataReader dr = cmd.ExecuteReader(); // this is for
1/1/2010 12:00:00 AM
,但我只想得到日期,比如1/1/2010
代码如下所示:
string sql = "SELECT * FROM Employees";
SqlCommand cmd = new SqlCommand(sql, sqlConnection);
SqlDataReader dr = cmd.ExecuteReader();
// this is for header
string _fname = "First Name";
string _lname = "Last Name";
string _dob = "DOB";
Console.WriteLine("{0} | {1} | {2}", _fname.PadRight(10), _lname.PadRight(10), _dob.PadRight(10));
while (dr.Read())
{
Console.WriteLine("{0} | {1} | {2}",
dr["FirstName"].ToString().PadRight(10),
dr["LastName"].ToString().PadRight(10),
// Below is what I want to format.
dr["DOB"].ToString().PadRight(10)
}
dr.Close();
我试过:
dr["DOB"].ToString(MM-dd-yyyy).PadRight(10)
dr["DOB"].Date.ToString(MM-dd-yyyy).PadRight(10)
然而,它们都不起作用
使用数据库读取数据时,如何设置日期格式?请使用下面的代码段进行尝试 旧代码:-
dr["DOB"].ToString().PadRight(10)
新代码:-
选择1
dr.GetDateTime(columnIndex).ToString("dd/MM/yyyy");
选择2
Convert.ToDateTime(dr["DOB"]).ToString("dd/MM/yyyy")
您需要首先将字符串值解析为DateTime。试试这样的
string datestr ="1/1/2010 12:00:00 AM";
DateTime dateTime;
var ds = DateTime.TryParse(datestr,out dateTime);
string outstr = dateTime.ToString("MM/dd/yyyy");
您可以使用来实现所需的格式。
您的代码可能如下所示:
var sql = "SELECT * FROM Employees";
var cmd = new SqlCommand(sql, sqlConnection);
SqlDataReader dr = cmd.ExecuteReader();
var _fname = "First Name";
var _lname = "Last Name";
var _dob = "DOB";
Console.WriteLine("{0} | {1} | {2}", _fname.PadRight(10),_lname.PadRight(10),_dob.PadRight(10));
while (dr.Read())
{
dt = (DateTime)dt["DOB"];
Console.WriteLine("{0} | {1} | {2}",
dr["FirstName"].ToString().PadRight(10),
dr["LastName"].ToString().PadRight(10),
dt.ToString("MM/dd/yy").PadRight(10));
}
dr.Close();
dr[“DOB”]
的返回值可能是字符串,而不是日期。在这种情况下,您可以将其转换为日期,然后.ToString(“MM/dd/yy”)
,或者只需找到“”的索引,然后按如下方式拆分字符串:
var str = (string)dr["DOB"]
Console.Write(str.Split(' ')[0]);
这将返回:
1/1/2010
您还可以从SQL转换它。
更新查询:
SELECT *, CONVERT(VARCHAR(10),DOB, 103) as FormattedDOB from Employees
还有你的c#:
你为什么不试试这个呢:
String.Format("{0:MM-dd-yyyy}", <YourDate>)
String.Format(“{0:MM-dd-yyyy}”,)
检查此项,我肯定希望OP不会将日期作为字符串存储在其数据库中。。。也许你应该问问他们,为什么会是一根绳子SqlDataReader
返回装箱类型。@Probinand:索引器的声明类型是object
,我希望结果是DateTime
或DateTimeOffset
。抱歉dr[“DOB”]是对象,需要强制转换为DateTime我将日期作为日期存储在数据库中。OP已经说过他们已经尝试过了-该代码不会编译,因为对象
没有ToString(string)
重载。@Jonsket当然不是,我们必须先强制转换。但取决于C的版本,这也不起作用,因为dr[“DOB”]
可为空,只能强制转换到对象?
。该代码仍然无法编译。包括一个真正的演员阵容,你可以提到代码>如果你认为C#8部分很重要,尽管我质疑你的说法,它无论如何都是可以为空的。我刚刚写了DateTime dt=(DateTime)阅读器[“dob”]代码>在C#8应用程序中,目标是.NETCore3.0,这很好。考虑到null值由DBNull.Value
表示,我不知道为什么它可以为null。(如果以后要无条件地取消对值的引用,我通常强烈建议使用cast操作符,而不是as
。InvalidCastException比NullReferenceException有用得多。)虽然这可以奏效,但我强烈建议在应用程序中而不是在数据库中执行所有表示逻辑。我只使用cast而不是使用Convert.ToDateTime
——这样,如果OP确实有字符串表示,他们将通过错误快速发现,并可以适当调整代码。如果是字符串表示形式,Convert.ToDateTime
可能会由于文化歧义而产生意外结果-例如,如果数据库今天返回2019年7月11日,但OP在英国机器上运行代码,Convert.ToDateTime
将返回7月11日。(在我看来,调用dr.GetDateTime
可能是最好的方法。)选项1起作用。我喜欢它,因为它简单易学!非常感谢。
String.Format("{0:MM-dd-yyyy}", <YourDate>)