Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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# ExcelReader,跳过第一行_C#_Sql_Excel - Fatal编程技术网

C# ExcelReader,跳过第一行

C# ExcelReader,跳过第一行,c#,sql,excel,C#,Sql,Excel,我正在为ERP系统开发一个小插件,即从Excel文件读取数据,然后插入数据库(SQL)。由于当前工作表的som原因,将跳过第一行。我试图解决这个问题,当抛出SQL错误时,当我强制程序插入无效的内容时,该行将显示在SQL数据库中 谁能看出我做错了什么,因为我觉得我什么都试过了 客户类别 class Customer { public int ActNo {get;set;} public int CustNo { get; set; } public string Del

我正在为ERP系统开发一个小插件,即从Excel文件读取数据,然后插入数据库(SQL)。由于当前工作表的som原因,将跳过第一行。我试图解决这个问题,当抛出SQL错误时,当我强制程序插入无效的内容时,该行将显示在SQL数据库中

谁能看出我做错了什么,因为我觉得我什么都试过了

客户类别

class Customer
{

    public int ActNo {get;set;}
    public int CustNo { get; set; }
    public string DelPri { get; set; }
    public int CustPrg3 = 22;
    public string Nm { get; set; }
    public int Gr6 = 5;
    public int CreDt { get; set; }
    public string CreUsr { get; set; }


    public Customer(int ActNo,int CustNo, string DelPri, string Nm, int CreDt){
    this.ActNo = ActNo;
    this.CustNo = CustNo;
    this.DelPri = DelPri;
    this.CustPrg3 = 22;
    this.Nm = Nm;
    this.Gr6 = 5;
    this.CreUsr = "Excel";
    this.CreDt = CreDt;
}

}
读者

public class ExcelData
{
    string _path;

    public ExcelData(string path)
    {
        _path = path;
    }

    public IExcelDataReader getExcelReader()
    {
        // ExcelDataReader works with the binary Excel file, so it needs a FileStream
        // to get started. This is how we avoid dependencies on ACE or Interop:
        FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read);

        // We return the interface, so that
        IExcelDataReader reader = null;
        try
        {
            if (_path.EndsWith(".xls"))
            {
                reader = ExcelReaderFactory.CreateBinaryReader(stream);
            }
            if (_path.EndsWith(".xlsx"))
            {
                reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
            }
            return reader;
        }
        catch (Exception)
        {
            throw;
        }
    }

    public IEnumerable<string> getWorksheetNames()
    {
        var reader = this.getExcelReader();
        var workbook = reader.AsDataSet();
        var sheets = from DataTable sheet in workbook.Tables select sheet.TableName;
        return sheets;
    }



    public IEnumerable<DataRow> GetSecondSheetData(bool firstRowIsColumnNames = true)
    {
        var reader = this.getExcelReader();
        reader.IsFirstRowAsColumnNames = firstRowIsColumnNames;
        return reader.AsDataSet().Tables[0].AsEnumerable();
    }



}
公共类数据
{
字符串路径;
公共数据(字符串路径)
{
_路径=路径;
}
公共IExcelDataReader getExcelReader()
{
//ExcelDataReader使用二进制Excel文件,因此需要文件流
//开始。这就是我们避免依赖ACE或Interop的方法:
FileStream stream=File.Open(_path,FileMode.Open,FileAccess.Read);
//我们返回接口,以便
IExcelDataReader=null;
尝试
{
if(_path.EndsWith(“.xls”))
{
reader=ExcelReaderFactory.CreateBaryReader(流);
}
if(_path.EndsWith(“.xlsx”))
{
reader=ExcelReaderFactory.CreateOpenXmlReader(流);
}
返回读取器;
}
捕获(例外)
{
投掷;
}
}
公共IEnumerable getWorksheetNames()
{
var reader=this.getExcelReader();
var工作簿=reader.AsDataSet();
var sheets=来自工作簿中的数据表工作表。表选择sheet.TableName;
报税表;
}
public IEnumerable GetSecondSheetData(bool firstRowIsColumnNames=true)
{
var reader=this.getExcelReader();
reader.IsFirstRowAsColumnNames=firstRowIsColumnNames;
返回reader.AsDataSet().Tables[0].AsEnumerable();
}
}
使用读卡器并添加到客户阵列中

if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {

            path = openFileDialog1.FileName;
            int maxActNo = 0;
            int maxCustNo = 0;

            var excelData = new ExcelData(path);
            var albums = excelData.GetSecondSheetData();
            List<Customer> customers = new List<Customer>();

            Customer testCust = new Customer(1, 1, "Test", "Test", Convert.ToInt32(DateTime.Now.ToString("yyyyMMdd")));
            customers.Add(testCust);




            SqlDataReader rdr = cmd.ExecuteReader();
            rdr.Read();
            maxActNo = Convert.ToInt32(rdr["HighestActNo"]);
            maxCustNo = Convert.ToInt32(rdr["HighestCustNo"]);
            rdr.Close();

            foreach (var row in albums)
            {
                if (row.ItemArray.Length == 8
                                              && row.ItemArray[0].ToString() != "Dato"
                                              //&& row.ItemArray[0].ToString().Contains(convertedDate)
                                              && row.ItemArray[1].ToString() != "Varenummer"
                                              && row.ItemArray[2].ToString() != "Varenavn"
                                              && row.ItemArray[3].ToString() != "Kundekonto"
                                              && row.ItemArray[4].ToString() != "Navn"
                                              && row.ItemArray[5].ToString() != "Antall"
                                              && row.ItemArray[6].ToString() != "Antall"
                                              && row.ItemArray[7].ToString() != "Enhet"
                                              //&& row.ItemArray[0].ToString() != ""
                                              //&& row.ItemArray[1].ToString() != ""
                                              //&& row.ItemArray[2].ToString() != ""
                                              //&& row.ItemArray[3].ToString() != ""
                                              //&& row.ItemArray[4].ToString() != ""
                                              //&& row.ItemArray[5].ToString() != ""
                                              //&& row.ItemArray[6].ToString() != ""
                                              //&& row.ItemArray[7].ToString() != ""
                    )                                                                        
                {

                    Customer cust = new Customer(
                    maxActNo,
                    maxCustNo,
                    row[3].ToString(),
                    row[4].ToString(), 
                    Convert.ToInt32(DateTime.Now.ToString("yyyyMMdd")));

                    if (customers[customers.Count() - 1].DelPri != row[3].ToString())
                    {
                        customers.Add(cust);

                        maxActNo++;
                        maxCustNo++;

                    }


                }
            }
            customers.RemoveAt(0);
            ImportController controller = new ImportController();
            controller.insertCustomerIfNotExist(customers);
            button2.Enabled = false;

        }

    }
if(openFileDialog1.ShowDialog()==DialogResult.OK)
{
path=openFileDialog1.FileName;
int maxActNo=0;
int-maxCustNo=0;
var excelData=新的excelData(路径);
var albums=excelData.GetSecondSheetData();
列出客户=新列表();
Customer testCust=新客户(1,1,“Test”,“Test”,Convert.ToInt32(DateTime.Now.ToString(“yyyyMMdd”));
customers.Add(testCust);
SqlDataReader rdr=cmd.ExecuteReader();
rdr.Read();
maxActNo=Convert.ToInt32(rdr[“HighestActNo]”);
maxCustNo=Convert.ToInt32(rdr[“HighestCustNo]”);
rdr.Close();
foreach(相册中的var行)
{
如果(row.ItemArray.Length==8
&&row.ItemArray[0]。ToString()!=“Dato”
//&&row.ItemArray[0].ToString()包含(convertedDate)
&&row.ItemArray[1].ToString()!=“Varenummer”
&&row.ItemArray[2].ToString()!=“Varenavn”
&&row.ItemArray[3].ToString()!=“Kundekonto”
&&row.ItemArray[4].ToString()!=“Navn”
&&row.ItemArray[5].ToString()!=“Antall”
&&row.ItemArray[6].ToString()!=“Antall”
&&row.ItemArray[7].ToString()!=“Enhet”
//&&row.ItemArray[0]。ToString()!=“”
//&&row.ItemArray[1]。ToString()!=“”
//&&row.ItemArray[2]。ToString()!=“”
//&&row.ItemArray[3]。ToString()!=“”
//&&row.ItemArray[4]。ToString()!=“”
//&&row.ItemArray[5]。ToString()!=“”
//&&row.ItemArray[6]。ToString()!=“”
//&&row.ItemArray[7]。ToString()!=“”
)                                                                        
{
客户客户=新客户(
maxActNo,
马克斯库斯诺,
第[3]行。ToString(),
第[4]行。ToString(),
转换.ToInt32(DateTime.Now.ToString(“yyyyMMdd”);
if(customers[customers.Count()-1].DelPri!=行[3].ToString())
{
添加(cust);
maxActNo++;
maxCustNo++;
}
}
}
客户。RemoveAt(0);
ImportController=新的ImportController();
controller.insertCustomerIfNotExist(客户);
按钮2.Enabled=false;
}
}
我选择不显示SQL,因为我知道probleb不在查询中,而是在if语句中的某个地方对行进行排序,但我已经尝试了几个小时,并认为我需要一个提示


感谢您的建议

如果有人看到这一点,我会找出我的代码运行不符合预期的原因。 上面的代码中没有错误,我对从索引1而不是索引0开始的插入循环视而不见

结束这个问题,但感谢所有阅读或试图回答的人

for (int i = 1; i < customers.Count; i++)
for(int i=1;i
需要

for (int i = 0; i < customers.Count; i++)
for(int i=0;i

在插入函数中。

对于任何看到这一点的人,我都明白了为什么