C# 如何使用批量插入管理插入到表中的数据

C# 如何使用批量插入管理插入到表中的数据,c#,sql-server,csv,C#,Sql Server,Csv,我有一个C应用程序,它将数据从csv文件捕获到SQL表 文本文件如下所示 students.csv 每个项目都位于csv文件中自己的单元格中。我只是把它隔开,这样你就可以看到文件里有什么了 基本上,我必须将这些数据插入到两个表中,但正如您在id列中看到的,这些元素的编号相同,id是主键 表格应如下所示: TBL学生 另一个表应该包含所有数据,其中的数据只包含代码不是ab11的数据,并且应该包含csv文件中标题旁边显示的月份。 如下所示 tblPaid 这是我目前拥有的,但我似乎无法获得输出 pr

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

文本文件如下所示

students.csv

每个项目都位于csv文件中自己的单元格中。我只是把它隔开,这样你就可以看到文件里有什么了

基本上,我必须将这些数据插入到两个表中,但正如您在id列中看到的,这些元素的编号相同,id是主键

表格应如下所示:

TBL学生

另一个表应该包含所有数据,其中的数据只包含代码不是ab11的数据,并且应该包含csv文件中标题旁边显示的月份。 如下所示

tblPaid

这是我目前拥有的,但我似乎无法获得输出

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的评论看得太字面了;正如他所说,他评论中的下划线代表空格。添加下划线的效果是,它现在显示为: 大容量插入t_original FROM_{file}注意,FROM和file之间缺少空间。WITH前面的下划线也是如此

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


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

您需要在“+文件+”中添加空格,我使用下划线作为空格。您的数据中有多少行?@YasirMajeed我不知道有多少行,因为用户必须使用“openFileDialog”打开文件,所以每个月都会有更大的文件还有一些小的你不能这样做我想。。。文件位于用户的本地计算机上,SQL位于另一台计算机上。大容量插入无法在用户计算机上看到文件。行终止符='\\n'
id      code    amount
1       ab11    5000
2       ab11    6000
3       ab11    8000
4       ab11    7000
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);
        }
    }
}