[英]C# WinForm error import from excel to database
喜。 我需要了解为什么会收到这样的错误: 从Excel错误导入C#Windows表单
我不能将年份与字符串(年份)分开。 或者,我可以放弃拆分并直接将字符串导入为“日期”吗? 抱歉,我还是c#的初学者,但是我需要这个帮助,对我来说是一项任务。
这是我的代码:
for (int i = 0; i < dvColumns.Count; i++)
{
string columnName = string.Empty;
string columnField = string.Empty;
if ((dvColumns[i]["Header"] != null) && (!Convert.IsDBNull(dvColumns[i]["Header"])))
{
columnName = dvColumns[i]["Header"].ToString();
}
if ((dvColumns[i]["Field"] != null) && (!Convert.IsDBNull(dvColumns[i]["Field"])))
{
columnField = dvColumns[i]["Field"].ToString();
}
rangeObject = cellsObject.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, cellsObject, new object[] { row, i + 1 });
object valueObject = rangeObject.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeObject, null);
if (columnName == "FiscalCode" && columnField == "PartnerId")
{
string fiscalCode = Erp.Core.Utils.GetStringFromObject(valueObject);
partnerId = p.GetPartnerIdByFiscalCode(fiscalCode);
eventRow["PartnerId"] = partnerId;
}
else if (columnField == "StartDate" || columnField == "EndDate")
{
string date = Erp.Core.Utils.GetStringFromObject(valueObject);
DateTime columnDate = DateTime.Now;
string[] dateComponents = null;
int year = 0;
int month = 0;
int day = 0;
if (date.Contains("."))
{
dateComponents = date.Split('.');
}
if (date.Contains("/"))
{
dateComponents = date.Split('/');
}
if (date.Contains(":"))
{
dateComponents = date.Split(':');
}
if (dateComponents.Length > 1)
{
string s = dateComponents[0];
day = Erp.Core.Utils.GetIntFromObject(s);
s = dateComponents[1];
month = Erp.Core.Utils.GetIntFromObject(s);
s = dateComponents[2];
year = Erp.Core.Utils.GetIntFromObject(s);
columnDate = new DateTime(year, month, day, 9, 0, 0);
}
eventRow[columnField] = columnDate;
}
else if (columnField != "PartnerId" && columnField != "StartDate" && columnField != "EndDate")
{
eventRow[columnField] = valueObject;
}
}
我试图保持与数据库表相同的excel格式:“ yyyy / mm / dd hh:mm:ss.000”。
行date = Erp.Core.Utils.GetStringFromObject(valueObject);
从第一个Excel单元格获取我的日期。 ds.Tables [“ Events”]一直为空。
我知道这一行eventRow[columnField] = date;
必须在DB中添加日期,真的吗? 拆分后,day正常(通过s [0]接收一个整数),month正常(通过s [1]接收一个整数,但年份的s [2]类似于2017 19:06:22...。年加时间)。 我尝试再次按空间划分,但没有结果,以保持年份中的数字(2017)为变量。
最好的方法是使用DateTime.ParseExact
方法。 在您的情况下,如果原始格式为'yyyy/mm/dd hh:mm:ss.000'
,则可以将其转换为DateTime
如下所示:
//string date = Erp.Core.Utils.GetStringFromObject(valueObject);
string date = "2017/08/15 10:20:30.000";
DateTime columnDate = DateTime.ParseExact(date, "yyyy/MM/dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
这样,您可以跳过解析excel字符串。 在您的示例中,用法将如下所示:
//...snip...
else if (columnField == "StartDate" || columnField == "EndDate")
{
string date = Erp.Core.Utils.GetStringFromObject(valueObject);
//parsing date string
DateTime columnDate = DateTime.ParseExact(date, "yyyy/MM/dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
eventRow[columnField] = columnDate;
}
else if (columnField != "PartnerId" && columnField != "StartDate" && columnField != "EndDate")
{
eventRow[columnField] = valueObject;
}
如果小时格式为12小时,请使用小写hh,例如"yyyy/MM/dd hh:mm:ss.fff"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.