【问题标题】:how to manage the data I insert into a table using BULK INSERT如何管理我使用 BULK INSERT 插入到表中的数据
【发布时间】:2015-03-31 08:03:39
【问题描述】:

我有一个 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 是主键

表格应如下所示:

tbl学生

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

而另一个表应该包含所有数据,其中只有代码不是“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 文件插入的表格,我必须跳过第一行

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

谢谢

【问题讨论】:

  • 您需要添加空格FROM_" + file + "_WITH(我使用下划线表示空格)
  • 您的数据中有多少行?
  • @YasirMajeed 我不知道它有多少行,因为用户必须使用 'openFileDialog' 打开文件,所以 每个月总会有一些文件更大,一些更小
  • 你不能这样做(我认为)...文件在用户的(本地)计算机上,SQL 在另一台计算机上。 BULK INSERT 无法“看到”用户计算机上的文件。
  • ROWTERMINATOR = '\\n'

标签: c# sql-server csv


【解决方案1】:

你把@StuartLC 的评论看得太直白了;正如他所说,他评论中的下划线代表空格。添加下划线的效果是它现在显示为: BULK INSERT t_original FROM_{file}(注意from 和文件之间没有空间)。 WITH前面的下划线也是如此。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多