如何使用BULK INSERT管理我插入表中的数据

时间:2015-03-31 08:03:39

标签: c# sql-server csv

我有一个 C#应用程序,它将 csv 文件中的数据捕获到 SQL表

文本文件如下所示

students.csv

Header 201501
id      code    amount
1       ab11    5000
2       ab11    6000
3       ab11    8000
3       wx34    2500
3       df21    1000
4       ab11    7000
4       zx54    3500

每个项目都在csv文件中的自己的单元格中。 "我只是间隔这个,以便你可以看到文件中的内容"。

基本上我必须将此数据插入两个表格,但正如您在 id列中看到的那样,具有相同数字的元素和 id是主键

表格应如下所示:

tblStudents

id      code    amount
1       ab11    5000
2       ab11    6000
3       ab11    8000
4       ab11    7000

另一个表应该包含所有带有数据的数据,只有代码不是"#11; ab11" ,并且应该有月份出现在csv中文件旁边的文件。 如下所示

tblPaid

Header 201501
id      code    amount month
3       wx34    2500   201501
3       df21    1000   201501
4       zx54    3500   201501

这就是我现在所拥有的,但我似乎无法获得输出

private void btnSelect_Click(object sender, EventArgs e)
{


    btnNext.Enabled = true;

    openFileDialog1.Filter = ".csv file|*.csv*";
    openFileDialog1.FilterIndex = 1;

    DialogResult result = openFileDialog1.ShowDialog();

    if (result == DialogResult.Yes)
    {
        String file = openFileDialog1.FileName;
        btnNext.Enabled = true;

        try
        {
            string connect = "Data Source=BRIAN-PC\\SQLEXPRESS; Initial Catalog=PSAHoldings; user id =sa; Password=kagiso";

            string table = "IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='t_original' AND xtype='U')" +
                "CREATE TABLE t_original (" +
                "empId varChar(10) NOT NULL PRIMARY KEY," +
                "paycode varChar(10) NOT NULL," +
                "amount int NOT NULL," +
                ")";

            SqlConnection con = new SqlConnection(connect);
            con.Open();

            SqlCommand createTable = new SqlCommand(table, con);
            createTable.ExecuteNonQuery();


            String BulkInsert = "BULK INSERT t_original FROM_" +
                file + "_WITH (--FIRSTROW = 3," +
                "FIELDTERMINATOR = '|'," +
                "ROWTERMINATOR = '\\n')";

            SqlCommand bulkCmd = new SqlCommand(BulkInsert, con);
            bulkCmd.ExecuteNonQuery();

        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.ToString(), "Exception Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}

我无法进入桌面,我的桌子是空的

t_original 是我必须将 students.csv 文件插入的表格,我必须先跳过第一行

任何帮助和建议将不胜感激

谢谢

1 个答案:

答案 0 :(得分:0)

您对@StuartLC的评论过于文字;正如他所说,他的评论中的下划线代表了空间。添加的下划线的效果是它现在读取: BULK INSERT t_original FROM_{file}(注意from和文件之间空格不足)。 WITH前面的下划线也是如此。

此外,双短划线(--)代表注释,因此后面的所有内容都不会执行。

如果你调试,并获得BulkInsert的实际值,并执行该语句,如果它执行,我会非常惊讶,它可能会使错误更容易找到。

相关问题