【发布时间】:2017-01-04 16:00:53
【问题描述】:
我正在读取一个 CSV 文件,但它只使 SQL 表具有 2 列(ID 和 test)`但它不会用 CSV 文件中的值填充这些列。这是我得到的代码:
public void GetDataTabletFromCSVFile2(string csv_file_path, string tablenaam)
{
string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString;
using (SqlConnection dbConnection = new SqlConnection(cn))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = dbConnection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = $@"CREATE TABLE test (
[ID] INT IDENTITY (1, 1) NOT NULL,
[testingcolumn] VARCHAR (1023) NULL,
CONSTRAINT [PK_{test}] PRIMARY KEY CLUSTERED ([ID] ASC)
)";
try
{
dbConnection.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException e)
{
MessageBox.Show(e.Message.ToString(), "Error Message");
}
finally
{
dbConnection.Close();
}
}
}
string line;
System.Data.DataTable csvData = new System.Data.DataTable();
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader(csv_file_path);
while ((line = file.ReadLine()) != null)
{
DataRow newRow = csvData.NewRow();
csvData.Rows.Add(newRow);
}
file.Close();
InsertDataIntoSQLServerUsingSQLBulkCopy2(csvData, tablenaam);
}
static void InsertDataIntoSQLServerUsingSQLBulkCopy2(System.Data.DataTable csvFileData, string Tablename)
{
string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString;
using (SqlConnection dbConnection = new SqlConnection(cn))
{
dbConnection.Open();
string sqlTrunc = "TRUNCATE TABLE " + Tablename;
SqlCommand cmd = new SqlCommand(sqlTrunc, dbConnection);
cmd.ExecuteNonQuery();
using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
{
s.ColumnMappings.Clear();
s.DestinationTableName = Tablename;
foreach (var column in csvFileData.Columns)
s.ColumnMappings.Add(column.ToString(), column.ToString());
s.WriteToServer(csvFileData);
dbConnection.Close();
}
}
}
我的 SQL 表现在看起来像这样:
------------
| ID | test|
------------
|null|null |
------------
虽然它应该看起来像:
-------------
| ID | test |
-------------
|1 |value1|
-------------
|2 |value2|
-------------
|3 |value3|
-------------
编辑:这也不起作用:
string line;
System.Data.DataTable csvData = new System.Data.DataTable();
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader(csv_file_path);
int i = 0;
DataColumn datecolumn = new DataColumn("ID");
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
DataColumn datecolumn2 = new DataColumn("RunTimeGroupCheck");
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn2);
while ((line = file.ReadLine()) != null)
{
var id = (i++); //Code this method
var test = (line); //Code this method
csvData.Rows.Add(id, test);
}
file.Close();
InsertDataIntoSQLServerUsingSQLBulkCopy2(csvData, tablenaam);
【问题讨论】: