繁体   English   中英

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

[英]how to manage the data I insert into a table using BULK INSERT

我有一个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列中看到的那样,are元素具有相同的编号,而id是主键

该表应如下所示:

tbl学生

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

而另一个表中的所有数据应仅包含带有非“ ab11”代码的数据,并且应具有出现在Header旁边的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文件插入其中的表,而我必须将第一个跳过

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

谢谢

您对@StuartLC的评论太直白了; 如他所说,他评论中的下划线代表空格。 添加的下划线的作用是,现在显示为: BULK INSERT t_original FROM_{file} (注意from和file之间没有空格)。 WITH前面的下划线也是如此。

此外,双破折号( -- )表示注释,因此它之后的所有内容都不会执行。

如果您调试并获取BulkInsert的实际值,然后执行该语句,如果执行该语句,我将感到非常惊讶,这可能会使错误更容易发现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM