【问题标题】:How to counter/cross check excel data upload to sql database?如何反制/交叉检查excel数据上传到sql数据库?
【发布时间】:2018-03-19 07:11:00
【问题描述】:
string fpath;
using (OpenFileDialog ofd = new OpenFileDialog())
{
    ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    ofd.Title = "Select an excel file";
    ofd.Filter = "Excel Files | *.xls";
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        fpath = ofd.FileName;
        DataTable dt = new DataTable();
        using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;
                                        Data Source="+ fpath +"; Extended Properties='Excel 8.0; HDR=YES'"))
        {
        conn.Open();
        using (OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM [Sheet1$]",conn))
        {
            using (OleDbDataAdapter oda = new OleDbDataAdapter(cmd))
            {
                oda.SelectCommand = cmd;
                oda.Fill(dt);
            }
        }
        conn.Close();
    }
    if (dt != null)
    {
        using (SqlConnection conn = new SqlConnection(@"Data Source=(local);
                                               Initial Catalog=inventory;
                                               Integrated Security=True"))
        {
            conn.Open();
            using (SqlBulkCopy sbc = new SqlBulkCopy(conn))
            {
                sbc.DestinationTableName = "dbo.product";
                sbc.ColumnMappings.Add("Item", "Item");
                sbc.ColumnMappings.Add("Brand", "Brand");
                sbc.ColumnMappings.Add("Part", "Part");
                sbc.ColumnMappings.Add("Description", "Description");
                sbc.ColumnMappings.Add("Manufacturer", "Manufacturer");
                sbc.ColumnMappings.Add("Car", "Car");
                sbc.ColumnMappings.Add("Year", "Year");
                sbc.ColumnMappings.Add("Price", "Price");
                sbc.WriteToServer(dt);
                MessageBox.Show("Import Successfull.", "Import Data", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                conn.Close();
            }
        }
    }
}

上面的代码让用户上传一个excel文件(97-2003格式)要复制到sql数据库。问题是如何检查数据库中是否已经存在excel数据?

excel文件与sql数据库的列名相同。

【问题讨论】:

    标签: c# sql sql-server excel database


    【解决方案1】:

    我已经使用 CTE 解决了这个问题,它将删除重复项并保留单个数据。每次上传 excel 时都会运行。

    using (SqlCommand cmd = new SqlCommand(@"WITH CTE_DELETE AS
                                             (SELECT ROW_NUMBER() OVER
                                             (PARTITION BY Item,
                                                           Brand, 
                                                           Part, 
                                                           Description, 
                                                           Manufacturer,
                                                           Car, 
                                                           Year, 
                                                           Price ORDER BY Item)
                                              RN FROM dbo.product)
                                              DELETE FROM CTE_DELETE WHERE RN > 1", conn))
    {
        cmd.ExecuteNonQuery();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多