【发布时间】:2016-03-17 13:57:42
【问题描述】:
我正在使用此代码将 csv 文件插入到我的数据库中:
private void InsertDataIntoSQLServerUsingSQLBulkCopy(DataTable csvFileData)
{
using (SqlConnection dbConnection = new SqlConnection(ConnectionString))
{
dbConnection.Open();
using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
{
s.DestinationTableName = "tablename";
foreach (var column in csvFileData.Columns)
s.ColumnMappings.Add(column.ToString(), column.ToString());
s.WriteToServer(csvFileData);
}
}
}
private static DataTable GetDataTabletFromCSVFile(string csv_file_path)
{
DataTable csvData = new DataTable();
try
{
using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
csvData.Rows.Add(fieldData);
}
}
}
我的数据库中有临时数据。为了测试这段代码,我从 SQL 服务器复制了带有标题的字段并将其粘贴到一个 Excel 文件中。然后我将 excel 文件保存到 csv 并运行代码。它完美地将csv中的数据添加到数据库中!
然后我尝试运行一个与我的原始 csv 文件具有相似值的 csv 文件,它给了我一个“String to DateTime”异常。所以我知道日期有问题,我知道 excel 列的值是“日期”。
我真的对这个摸不着头脑。有什么好的方法来解析带有日期的列吗?
【问题讨论】:
-
您需要向我们展示异常的全文,以及您尝试导入的日期的字符串表示形式。请注意,简单地将列设置为 excel 中的
Date对 CSV 文件没有任何意义,其中没有类型。很可能 excel 输出的格式与您尝试读取的格式不兼容(例如 excel 输出 MM/dd/yyyy 并且您的应用程序需要 dd/MM/yyyy)。 -
完整的例外是: InnerException:将字符串转换为 DateTime 时,在将每个变量放入 DateTime 对象之前解析字符串以获取日期。确保您的方法参数格式正确。我的日期:2015 年 11 月 30 日
标签: c# excel csv datetime sqlbulkcopy