我正在使用此代码将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 Server复制了包含标题的字段,并将其粘贴到excel文件中。然后我将excel文件保存到csv并运行代码。它将csv中的数据完美地添加到数据库中!
然后我尝试运行一个与我原来的csv文件具有相似值的csv文件,它给了我一个&#39; String to DateTime&#39;例外。所以我知道Dates有些事情,我知道excel专栏的价值是&#39; Date&#39;。
我真的为此苦苦挣扎。有没有用日期解析列的好方法?
答案 0 :(得分:0)
我注意到您的代码存在一些可能会给您带来麻烦的问题。
DataColumn
实例时,默认列类型为System.String
。这可能会导致您的日期问题。datetime
,并且您尝试批量插入System.String
列,则会遇到问题。我的建议如下:
DataColumn
构造函数的重载:new DataColumn("Name", typeof(DateTime))
您正在进行的操作非常基本ETL。看起来你有Extract和Load部分工作,你缺少的是Transform组件。