首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用大容量插入管理插入到表中的数据

如何使用大容量插入管理插入到表中的数据
EN

Stack Overflow用户
提问于 2015-03-31 08:03:39
回答 1查看 125关注 0票数 0

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

文本文件如下所示

students.csv

代码语言:javascript
复制
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是主键

表格应如下所示:

tblStudents

代码语言:javascript
复制
id      code    amount
1       ab11    5000
2       ab11    6000
3       ab11    8000
4       ab11    7000

而另一个表应该有所有数据,只有代码不是"ab11",而月份应该出现在csv文件的头旁。,如下所示

tblPaid

代码语言:javascript
复制
Header 201501
id      code    amount month
3       wx34    2500   201501
3       df21    1000   201501
4       zx54    3500   201501

这是我目前所拥有的,但我似乎无法得到一个输出

代码语言:javascript
复制
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);
        }
    }
}

我不能把任何东西放进桌子,我的桌子是空的

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

如有任何帮助和建议,我们将不胜感激。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-03-31 12:32:28

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29363575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档