2013-02-19 16 views
-1

엑셀 시트를 통해 입력이 제공되는 asp.net 응용 프로그램을 개발했습니다. 이 응용 프로그램은 WINDOWS XP 및 MS office 2008이 설치된 시스템에서 정상적으로 작동합니다.WINDOWS 7 및 MS office 2010이 설치된 시스템에서 동일한 응용 프로그램을 실행하려고하면 Argument Null Exception이 발생합니다.asp.net 웹 응용 프로그램의 ArgumentNull 예외

코드 :

foreach (var dr in data) 
      { 
       LHSupdate = new LHSUpdate(); 
       if (!string.IsNullOrEmpty(Convert.ToString(dr["Associate Id"]))) 
       { 
        AssociateID = Convert.ToString(dr["Associate Id"]); 
       } 
       LHSupdate.AssciateID = AssociateID; 
       if (!string.IsNullOrEmpty(Convert.ToString(dr["Associate Name"]))) 
       { 
        AssociateName = Convert.ToString(dr["Associate Name"]); 
       } 
       LHSupdate.Name = AssociateName; 

       var designation = dsData.Tables["LHS"].AsEnumerable().Where(r => Convert.ToString(r["Associate Id"]).Trim() == LHSupdate.AssciateID.Trim()); 

       if (designation != null) 
       { 
        foreach (var de in designation) 
        { 
         LHSupdate.Designation = Convert.ToString(de["Level"]); 
        } 
       } 

       else 
       { 
        LHSupdate.Designation = ""; 
       }     
       LHSupdate.CourseName = Convert.ToString(dr["Trainings "]); 
       LHSupdate.CourseStatus = Convert.ToString(dr["Training Status"]); 
       LHSupdate.Score = Convert.ToString(dr["Credits"]); 
       LHSupdate.LearningMode = Convert.ToString(dr["Venue"]); 
       LHSupdate.StartDate = Convert.ToString(dr["Start Date"]); 
       LHSupdate.EndDate = Convert.ToString(dr["End Date"]);     
       lstLHS.Add(LHSupdate); 
      } 

I 라인에 오류가 점점 오전 :

var designation = dsData.Tables["LHS"].AsEnumerable().Where(r => Convert.ToString(r["Associate Id"]).Trim() == LHSupdate.AssciateID.Trim()); 

코드 :

private DataSet Getdata() 
     { 
      string connectionString = ""; 
      string getExcelSheetName = string.Empty; 
      if (fuLHSEntry.HasFile) 
      { 
       string fileName = Path.GetFileName(fuLHSEntry.PostedFile.FileName); 
       string fileExtension = Path.GetExtension(fuLHSEntry.PostedFile.FileName); 
       string fileLocation = Server.MapPath("~/App_Data/" + fileName); 
       fuLHSEntry.SaveAs(fileLocation); 

       if (fileExtension == ".xls") 
       { 
        connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileLocation + @";Extended Properties=" + Convert.ToChar(34).ToString() + @"Excel 8.0;Imex=1;HDR=Yes;" + Convert.ToChar(34).ToString(); 
       } 
       else if (fileExtension == ".xlsx" || fileExtension == ".xlsm") 
       { 
        connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + @";Extended Properties=" + Convert.ToChar(34).ToString() + @"Excel 12.0;IMEX=2;HDR=Yes;" + Convert.ToChar(34).ToString(); 
       } 

       OleDbConnection con = new OleDbConnection(connectionString); 
       OleDbCommand cmd = new OleDbCommand(); 
       cmd.CommandType = System.Data.CommandType.Text; 
       cmd.Connection = con; 
       OleDbDataAdapter dAdapter = new OleDbDataAdapter(cmd); 
       DataTable dtExcelRecords = new DataTable(); 
       con.Open(); 
       DataTable dtExcelSheetName = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       int count = 0; 
       foreach (DataRow dr in dtExcelSheetName.Rows) 
       { 
        getExcelSheetName = GetSheetName(dr); 
        if (!string.IsNullOrEmpty(getExcelSheetName)) 
        {       
         cmd.CommandText = "SELECT * FROM [" + getExcelSheetName + "]"; 
         dAdapter.SelectCommand = cmd; 
         if (getExcelSheetName.ToUpper().Contains("LEARNING")) 
         { 
          getExcelSheetName = "LEARNING"; 
         } 
         else 
         { 
          getExcelSheetName = "LHS"; 
         } 
         dAdapter.Fill(dsData, getExcelSheetName); 
         count++; 
         if (count == 2) 
         { 
          break; 
         } 
        } 
       } 
       con.Close(); 
      } 
      return dsData; 
     } 

이 문제를 해결 도와주세요. 감사합니다. Raji

+2

을 코드이 질문없이 대답하는 것은 불가능합니다. 관련 코드를 제공하고 정확히 어디에서 실패했는지 설명하십시오. –

+0

나는 코드로 게시물을 편집했습니다. 제발 도울 수 – raji

+0

이것은 아마도 null 일 수 dsData.Tables [ "LHS"] – mdcuesta

답변

0

코드에서 두 개의 가능한 이름이 나타날 수 있습니다.

어느 항상 읽을 때 나중에 사용하고 같은 이름을 제공 :

dAdapter.Fill(dsData, "LHS"); 

을 또는 전부의 이름을 무시하는 인덱스 테이블을 수행 할 수 있습니다

var designation = dsData.Tables[0].AsEnumerable().Where(r => Convert.ToString(r["Associate Id"]).Trim() == LHSupdate.AssciateID.Trim());