【发布时间】:2016-06-20 07:12:02
【问题描述】:
.csv 文件有 57 列,其中一些值为空。例如,,Jane,Doe,,35。假设第一个值(在逗号之前)是自动 ID 键,每次导入数据库时都会递增。问题是未导入空值,从而导致错误。我在这里理解的是 SQL 数据库无法读取空值,因此它会移动这些值,如下所示:Jane,Doe,35,从而使Jane 成为ID 的值。另一个问题是.csv 文件的列与表不匹配。例如,表有一个ID 列,而.csv 文件以Name 列开头。有没有办法从特定列开始将其导入数据库?
注意:这仅在一张表中。
问题:如果我创建一个与.csv 文件的列匹配的单独表,然后将其与具有ID 列的表连接起来(在示例中),是否更可取?
到目前为止我的代码:
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[54] { new DataColumn("Delay_Code"), and so on... });
string csvData = File.ReadAllText(e.FullPath);
foreach (string row in csvData.Split('\n'))
{
if (!string.IsNullOrEmpty(row))
{
dt.Rows.Add();
int i = 0;
foreach (string cell in row.Split(','))
{
dt.Rows[dt.Rows.Count - 1][i] = cell;
i++;
}
}
}
string consString = @"Data Source="blahblah";
using (SqlConnection con = new SqlConnection(consString))
{
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
{
//Set the database table name
sqlBulkCopy.DestinationTableName = "owner.Table";
con.Open();
sqlBulkCopy.WriteToServer(dt);
con.Close();
}
}
对于上面的代码,我创建了另一个与.csv 文件的列匹配的表。最初,该表在.csv 文件中的列之前有三列。
最好的方法是什么?
【问题讨论】:
标签: c# sql-server csv