繁体   English   中英

C#WinForm错误从Excel导入数据库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM