Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在导入到SQL Server数据库时删除Excel电子表格的顶行_C#_Sql Server_Excel - Fatal编程技术网

C# 如何在导入到SQL Server数据库时删除Excel电子表格的顶行

C# 如何在导入到SQL Server数据库时删除Excel电子表格的顶行,c#,sql-server,excel,C#,Sql Server,Excel,你好,堆栈溢出社区。我正在用C编写一个小应用程序,它可以将excel文件直接导入SQL数据库。我可以导入Excel文件中包含当前标题的文件,因为它们与数据库中的列名匹配(请参见下面的第二个图像链接),但是我希望为可以导入的Excel文件增加一些灵活性。例如:我需要导入的某些excel文件顶部有一个图例,该图例与我的数据库中的列标题不匹配(请参见第一个图像链接) 顶部不包含该图例的文件很容易导入 我正在寻找一种在导入时删除前9行(文件顶部的图例)的方法 这里是所有的源代码。任何帮助都将不胜感激

你好,堆栈溢出社区。我正在用C编写一个小应用程序,它可以将excel文件直接导入SQL数据库。我可以导入Excel文件中包含当前标题的文件,因为它们与数据库中的列名匹配(请参见下面的第二个图像链接),但是我希望为可以导入的Excel文件增加一些灵活性。例如:我需要导入的某些excel文件顶部有一个图例,该图例与我的数据库中的列标题不匹配(请参见第一个图像链接)

顶部不包含该图例的文件很容易导入

我正在寻找一种在导入时删除前9行(文件顶部的图例)的方法

这里是所有的源代码。任何帮助都将不胜感激

using ExcelDataReader;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ProviderBreakfastExcelReader
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

      private void BtnOpen_Click(object sender, EventArgs e)
    {
        using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Excel Workbook|*.xlsx", ValidateNames = true })
        {
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                var ExcelData = ExcelFileRead(ofd.FileName);
                cboSheet.Items.Clear();
                foreach (DataTable dt in ExcelData.Tables)
                {
                    cboSheet.Items.Add(dt.TableName);
                }
            }
        }
    }
    private void CboSheet_SelectedIndexChanged(object sender, EventArgs e)
    {
        string path = @"C:\Desktop\Dir\filename.xlsx";
        FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read);
        IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
        DataSet result = reader.AsDataSet();
        dataGridView.DataSource = result.Tables[cboSheet.SelectedIndex];
    }

    private DataSet ExcelFileRead(string path)
    {
        using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read))
        using (IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(fs))
        {
            var result = reader.AsDataSet(new ExcelDataSetConfiguration()
            {
                UseColumnDataType = true,
                ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
                {
                    EmptyColumnNamePrefix = "Column",
                    UseHeaderRow = true,
                }

            });
            return result;
        }
    }
   private void SendExcelToDatabase(string Filename)
    {
        var data = ExcelFileRead(Filename);
        using (var db = new ProviderBreakfastDBEntities())
        {
            foreach (DataRow record in data.Tables[0].Rows)
            {  
                int rank;
                var isValidRank = int.TryParse(record["Ranking"].ToString(), out rank);
                db.ProviderBreakfastExcels.Add(new ProviderBreakfastExcel
                {   
                    Ranking = isValidRank ? rank : new int?(), 
                    Contact = record["Contact"].ToString(),
                    LastName = record["LastName"].ToString(),
                    FirstName = record["FirstName"].ToString(),
                    // Bedsize = isValidBedsize ? beds : new int?(),
                    Bedsize = Convert.ToInt32(record["Bedsize"].ToString()),
                    City = record["City"].ToString(),
                    Company = record["Company"].ToString(),
                    JobTitle = record["JobTitle"].ToString(),
                    State = record["State"].ToString()
                }); 
            }
            db.SaveChanges();
        }
    }

    private void import_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd2 = new OpenFileDialog();
        if (ofd2.ShowDialog() == DialogResult.OK)
        {
            string stringFileName = ofd2.FileName;
            textBox1.Text = stringFileName;
            SendExcelToDatabase(stringFileName);
        }
    }
}
}

这是一个很好的小功能,可以将excel电子表格移动到datatable中,然后您可以将datatable插入sql db中。唯一需要更改的是删除x行

编辑:

private void SendExcelToDatabase(string Filename)
{
    int rowThread = HowManyRowsYouWouldLikeToSkipInExcel;
    var data = ExcelFileRead(Filename);
    using (var db = new ProviderBreakfastDBEntities())
    {
        foreach (DataRow record in data.Tables[0].Rows)
        {  
            if (!(rowThreshold >= x))
            {

            int rank;
            var isValidRank = int.TryParse(record["Ranking"].ToString(), out rank);
            db.ProviderBreakfastExcels.Add(new ProviderBreakfastExcel
            {   
                Ranking = isValidRank ? rank : new int?(), 
                Contact = record["Contact"].ToString(),
                LastName = record["LastName"].ToString(),
                FirstName = record["FirstName"].ToString(),
                // Bedsize = isValidBedsize ? beds : new int?(),
                Bedsize = Convert.ToInt32(record["Bedsize"].ToString()),
                City = record["City"].ToString(),
                Company = record["Company"].ToString(),
                JobTitle = record["JobTitle"].ToString(),
                State = record["State"].ToString()
            }); 
        }
      }
        db.SaveChanges();
x++
        }
    }
看看这种方法是否有效

这是一个很好的小功能,可以将excel电子表格移动到datatable中,然后您可以将datatable插入sql db中。唯一需要更改的是删除x行

编辑:

private void SendExcelToDatabase(string Filename)
{
    int rowThread = HowManyRowsYouWouldLikeToSkipInExcel;
    var data = ExcelFileRead(Filename);
    using (var db = new ProviderBreakfastDBEntities())
    {
        foreach (DataRow record in data.Tables[0].Rows)
        {  
            if (!(rowThreshold >= x))
            {

            int rank;
            var isValidRank = int.TryParse(record["Ranking"].ToString(), out rank);
            db.ProviderBreakfastExcels.Add(new ProviderBreakfastExcel
            {   
                Ranking = isValidRank ? rank : new int?(), 
                Contact = record["Contact"].ToString(),
                LastName = record["LastName"].ToString(),
                FirstName = record["FirstName"].ToString(),
                // Bedsize = isValidBedsize ? beds : new int?(),
                Bedsize = Convert.ToInt32(record["Bedsize"].ToString()),
                City = record["City"].ToString(),
                Company = record["Company"].ToString(),
                JobTitle = record["JobTitle"].ToString(),
                State = record["State"].ToString()
            }); 
        }
      }
        db.SaveChanges();
x++
        }
    }


看看这样是否有效。

我会使用ExcelReaderFactory数据集方法,然后您可以从数据表中删除行。谢谢您或您的回复@jdweng,但您愿意澄清一点吗?在数据表配置中使用StartRowPosition=10谢谢您Krishna,但这似乎对我不起作用。我得到一个错误,StartRowPosition不在当前上下文中……我查看了源代码以找到DataSet方法。没有安装库来查找确切的方法。我认为代码是GetExcelDataReader(DataReader)。AsDataSet()我会使用ExcelReaderFactory数据集方法,然后您可以从数据表中删除行。谢谢您或您的回复@jdweng,但您愿意澄清一点吗?在数据表配置中使用StartRowPosition=10谢谢Krishna,但这似乎对我不起作用。我得到一个错误,StartRowPosition不在当前上下文中……我查看了源代码以找到DataSet方法。没有安装库来查找确切的方法。我认为代码是GetExcelDataReader(DataReader)。AsDataSet()感谢数字播放,非常感谢!如果我能使用这种方法,这将非常有效。我非常欣赏这段代码。我必须使用ExcelDataReader作为任务的一部分。我已经更新了上面的代码,以反映现在所有的工作代码。您是否愿意看一看,看看是否可以帮助解决上述源代码中的问题?再次感谢你的帮助@PJValentini是要跳过的总行数,总是一个设定的数量?是的,这是正确的,前9行每次都可以跳过。我将尝试你的更新代码。谢谢你的回复!谢谢您的数字播放,非常感谢!如果我能使用这种方法,这将非常有效。我非常欣赏这段代码。我必须使用ExcelDataReader作为任务的一部分。我已经更新了上面的代码,以反映现在所有的工作代码。您是否愿意看一看,看看是否可以帮助解决上述源代码中的问题?再次感谢你的帮助@PJValentini是要跳过的总行数,总是一个设定的数量?是的,这是正确的,前9行每次都可以跳过。我将尝试你的更新代码。谢谢你的回复!