从数据行(C#)检索日期时间值
如何从行中获取C中的从数据行(C#)检索日期时间值,c#,datetime,ado.net,C#,Datetime,Ado.net,如何从行中获取C中的DateTime值,当前代码给了我错误信息 感谢您的帮助,数据来自进度数据库: foreach (DataRow r in ds.Tables[0].Rows) { string prodCode = r["PRD-CDE"].ToString(); statCode = r["STAT"].ToString(); DateTime firstIssueDate = (DateTime)(r["FISS"]); DateTime endIss
DateTime
值,当前代码给了我错误信息
感谢您的帮助,数据来自进度数据库:
foreach (DataRow r in ds.Tables[0].Rows)
{
string prodCode = r["PRD-CDE"].ToString();
statCode = r["STAT"].ToString();
DateTime firstIssueDate = (DateTime)(r["FISS"]);
DateTime endIssueDate = (DateTime)(r["EISS"]);
if(endIssueDate > DateTime.Now)
{ /*do some thing...*/}
else {/*user invalid...*/}
}
获取日期转换和PAR有两种方法,谢谢大家的帮助
最终工作代码片段:
foreach (DataRow r in ds.Tables[0].Rows)
{
string prodCode = r["PRD-CDE"].ToString(),statCode = r["STAT"].ToString();
// r.<DateTime?>("FISS");
if (r["FISS"] != DBNull.Value)
{
DateTime firstIssueDate = Convert.ToDateTime(r["FISS"]);
if (r["EISS"] != DBNull.Value)
{
DateTime endIssueDate = DateTime.Parse(r["EISS"].ToString());
if (endIssueDate > DateTime.Now)
{
foreach(ds.Tables[0].行中的数据行r)
{
字符串prodCode=r[“PRD-CDE”].ToString(),statCode=r[“STAT”].ToString();
//r.(“FIS”);
如果(r[“FISS”!=DBNull.Value)
{
DateTime firstIssueDate=Convert.ToDateTime(r[“FISS”]);
如果(r[“EISS”!=DBNull.Value)
{
DateTime endIssueDate=DateTime.Parse(r[“EISS”].ToString());
如果(endIssueDate>DateTime.Now)
{
如果行返回该索引的字符串,我建议使用DateTime.Parse()
string prodCode = r["PRD-CDE"].ToString(),statCode = r["STAT"].ToString();
DateTime firstIssueDate = DateTime.Parse(r["FISS"].ToString());
DateTime endIssueDate = DateTime.Parse(r["EISS"].ToString());
您还可以根据需要使用
TryParse
。作为辅助答案,您还可以使用静态函数Convert.ToDateTime这只是一个猜测,但是如果数据库中的相应类型是DateTime,您是否可以检查该列是否可以为空
如果是这样,您可能需要执行检查r[“column”]==DBNull.Value
,然后将其传递给可为空的DateTime?字段
甚至更简单:
row.Field<DateTime?>("column")
行字段(“列”)
如果不是,那么是的,Convert.ToDateTime()或其他东西应该可以完成
编辑:
我在那里看到了您的最终代码,但您是否有机会这样做:
DateTime? firstIssueDate = r.Field<DateTime?>("fiss");
DateTime? endIssueDate = r.Field<DateTime?>("eiss");
if (firstIssueDate.HasValue && endIssueDate.HasValue)
{
firstIssueDate.Value // blah blah
endIssueDate.Value // blah blah
}
DateTime?firstIssueDate=r.Field(“FIS”);
日期时间?endIssueDate=r.字段(“EIS”);
if(firstIssueDate.HasValue&&endIssueDate.HasValue)
{
firstIssueDate.Value//blah blah
endIssueDate.Value//blah blah
}
DateTime.Parse(r[“FISS”].ToString())是一种方法,但它会抛出一个“字符串未被识别为有效的DateTime”错误。能否在r[“FISS”]列中显示实际字符串,这可能是一个国际化问题
foreach (DataRow r in ds.Tables[0].Rows)
{
string prodCode = r["PRD-CDE"].ToString();
string statCode = r["STAT"].ToString();
DateTime firstIssueDate = DateTime.Parse((r["FISS"]).ToString());
DateTime endIssueDate = DateTime.Parse((r["EISS"]).ToString());
if(endIssueDate > DateTime.Now)
{ /*do some thing...*/}
else {/*user invalid...*/}
}
这应该可以编译,并且可能对您有用。虽然它肯定不会执行您应该对生产代码执行的任何错误检查。还可以查看DateTime.TryParse,您可以查看添加IFormatProvider以确保格式按预期进行分析。如果您有一个具有特殊格式的DateTime字符串(不是任何标准的.NET日期时间格式)如果需要转换为.NET日期时间类型,可以使用
DateTime.ParseExact()
方法
有关更多详细信息(包括示例),请参见
如果您有多种格式需要解析,请尝试首先,执行r[“FISS”].GetType()并将其打印到控制台(或暂停并在调试器中查看)。如果它说这是一个字符串,则上面的大多数建议都会有帮助。如果它说了其他内容,请返回并更新您的问题。如果您想使用默认值(例如DateTime.MinValue),而不是null(DateTime?)或DBNull,您可以执行以下操作:
var firstIssueDate = r["FISS"] as DateTime? ?? DateTime.MinValue;
var endIssueDate = r["EISS"] as DateTime? ?? DateTime.MinValue;
您收到的任何错误消息都可能会有所帮助。数据集中列的数据类型是什么?它是SQL DateTime吗?它是一个正在进行的日期列数据库我知道这很晚,但如果它是数据库中的日期列,则我希望对象已经是日期时间,因此不需要转换。错误:参数“1”:无法转换为在键入以下代码后,将m'object'改为'string':DateTime firstIssueDate=DateTime.Parse(r[“FISS”]);甚至尝试过:DateTime firstIssueDate=DateTime.Parse(r[“FISS”].ToString());错误:ex={“string未被识别为有效的DateTime。”}您有没有办法向我们展示r[“FISS”]的内容。ToString()看起来像?可能是有人提到的可空类型。如果(r[“fis”]==DBNull.Value)这一个成功了是的,这是一个空值,仍在测试:)谢谢我看到了你的代码,并在“编辑”部分添加了一些建议。你觉得怎么样?我从未见过使用的.Field方法..尼斯+1