2014-11-05 2 views
0

SharePoint 2010 환경에 배포 된 .Net 양식으로 Excel 데이터를 업로드하는 데 문제가 있습니다. 이 기능은 .net 양식을 Excel에 업로드하여 Excel 양식을 서버의 한 위치에 저장합니다. Excel이 서버에 저장되면 Microsoft.ACE.OLEDB.12.0 공급자는 Excel에서 데이터를 가져 와서 .Net 텍스트 상자 컨트롤에서 쉼표로 구분 된 값으로 업로드합니다.SharePoint 2010 사용자 지정 양식으로 Excel 가져 오기

여기 현재 우리가 직면하고있는 문제가 있습니다.

1)이 기능은 사용자가 SharePoint 2010에서 서비스 계정 (상위 사용 권한 계정)으로 로그인 한 경우에만 작동합니다. 2.) SharePoint에서 사용자 계정으로 로그인하지 못했지만 아래에 오류가 발생했습니다. 나는 이것이 권한 문제로 인해 주로 발생한다고 생각한다. 모든 사용자에게 서비스 계정 권한을 할당 할 수는 없습니다.

엑셀 업로드 활동을 완료하고 사용자 계정의 로그인을 처분하기 위해 서비스 계정 로그인을 가장 할 수있는 방법이 있습니까? 또는 내 문제를 해결하는 데 도움이되는 제안 사항이 있습니까?

오류 메시지 :

오류가 발생했습니다 System.Data.OleDb.OleDbException : System.Data.OleDb.OleDbConnectionInternal..ctor에서 지정되지 않은 오류 System.Data.OleDb에서 (는 OleDbConnection 연결은 constr을 OleDbConnectionString) .OleDbConnectionFactory.CreateConnection (DbConnectionOptions 옵션, 개체 poolGroupProviderInfo, DbConnectionPool 풀, DbConnection owningObject)에서 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection (DbConnection owningConnection, DbConnectionPoolGroup poolGroup)에서 System.Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection) at System .Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection outerConnection, DbConnection System.Data.Common.DbDataAdapter.FillInternal (DataSet 데이터 집합, DataTable [])에서 System.Data.Office.AccessDbConnection.Open() System.Data.Common.DbDataAdapter.QuietOpen (IDbConnection 연결, ConnectionState & originalState)의 System.Data.OleDb.OleDbConnection.Open System.Data.Common.DbDataAdapter.Fill (DataSet DataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand 명령, CommandBehavior 비헤이비어)의 System.Data (System.Data.Data.Common.DbDataAdapter.Fill)에서 System.Data.Common.DbDataAdapter.Data의 데이터 형식, Int32 startRecord, Int32 maxRecords, SegmentationTool.createSegment.btnFileUploadForDNIS_Click에서 .Common.DbDataAdapter.Fill (데이터 집합와 DataSet) (개체 보낸 사람, EventArgs입니다 전자)

코드 :

strTarget = fileUploadForDNIS.FileName; 

    string[] arrCheckExtension = strTarget.Split('.'); 
        if (arrCheckExtension.Length >= 2) 
        { 
         if (arrCheckExtension[1].ToString().Equals("xls") || arrCheckExtension[1].ToString().Equals("xlsx")) 
         { 
          fileUploadForDNIS.SaveAs("B:\\Test\\" + strTarget); 
          strConnForExcel = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;""", "B:\\Test\\"+strTarget); 
          strQueryForExcel = String.Format("select dnis_id from [{0}$]", "oms_dnis"); 
          OleDbDataAdapter adapForDNIS = new OleDbDataAdapter(strQueryForExcel, strConnForExcel); 
          dsForDNIS = new DataSet(); 
          adapForDNIS.Fill(dsForDNIS); 
          if (dsForDNIS.Tables[0].Rows.Count > 0) 
          { 
           for (int i = 0; i < dsForDNIS.Tables[0].Rows.Count; i++) 
           { 
            if (strDNISids == "") 
            { 
             strDNISids += dsForDNIS.Tables[0].Rows[i]["dnis_id"].ToString(); 
            } 
            else 
            { 
             strDNISids += "," + dsForDNIS.Tables[0].Rows[i]["dnis_id"].ToString(); 
            } 
           } 
           txtSpecAcquWinbackDNISForUpload.Text = strDNISids; 
           rdoMSCSpecificValue.Focus(); 
           System.IO.File.Delete("B:\\Test\\" + strTarget); 
          } 
         } 
         else 
         { 
          Response.Write("<script language='javascript'>alert('Please Select File with .xls or xlsx Extension');</script>"); 
          fileUploadForDNIS.Focus(); 
         } 
        } 

답변

0

시스템 계정은 IIS 응용 프로그램 풀에 지정된 사용자입니다. 사용자가 b : \ test 폴더에 쓸 수있는 권한이 있다고 가정합니다. 다른 사용자에게는이 권한이 없으므로 작업이 실패합니다.

RunWithElevatedPermission을 사용할 수 있으며 코드는 시스템 계정 권한으로 실행할 수 있습니다.

내가 제안 그러나 :

1)/쓰기 오피스 파일을 읽을 수있는 Microsoft OpenXml를 사용을, 더 나은 당신은에 파일을 저장할 수 있습니다 ExcelDataReader 또는 ClosedXml

2) 등의 작업을 단순화 래퍼 라이브러리를 사용하는 파일 시스템 대신 문서 라이브러리 (여러 개의 FrontEnd 파일 시스템이있는 경우 더 좋은 해결책은 아닙니다.)) 난 당신이 메모리에 Excel 파일을 처리 할 수 ​​엑셀을 저장 할 필요가 없습니다 당신을보고 코드에서

3) (스트림) 포인트 1

희망이 도움말을 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. Max를 엑셀 데이터를 저장하고 메모리 스트림에 저장하도록 코드를 변경하고 프로세스가 문자열에 Excel 데이터를 할당하려고합니다. 현재 SharePoint 2010 서버 파일 시스템에서 Excel을 저장하고 읽으려는 동안 권한으로 인해 많은 문제가 발생합니다. 위의 링크로 나를 안내해 주셔서 감사합니다. 하지만 메모리 스트림에 데이터를 저장하고 C#을 통해 문자열에 할당 할 수 있는지 알려주실 수 있습니까? – user545359

+0

[읽기] ExcelDataReader를 사용하여 메모리에서 Excel을 읽는 방법은 [http://stackoverflow.com/questions/262341/get-data-from-an-uploaded-excel-file-without-saving-to-file-system] 어쨌든 당신이 달성하기를 원하는 것이 명확하지 않습니다. – Max