2014-02-17 55 views
0

我寫一個代碼查詢使用下面的SQL .cs​​v文件中的文件是我的代碼工作完全正常Microsoft Jet數據庫引擎無法打開

string fileDirectory = @"C:\TechnicalTest\GskTest\Csv\SampleData.csv"; 
string strCSVConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
      + fileDirectory + ";Extended Properties='text;HDR=YES;'"; 

string sqlCust = "Select Count(order_id), order_id, contact_id from SampleData.csv " 
+ "Group by order_id, contact_id " 
+ "Order by 1 Desc"; 

string sqlProd = "Select Count(order_id), product_id from SampleData.csv " 
+ "Group by product_id " 
+ "Order by 1 Desc"; 

string sqlOrders = "Select Count(order_id) from SampleData.csv " 
+"Order by 1 Desc"; 

OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(fileDirectory) + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\""); 
con.Open(); 

OleDbDataAdapter daCust = new OleDbDataAdapter(sqlCust, con); 
DataTable dtCust = new DataTable(); 
daCust.Fill(dtCust); 

OleDbDataAdapter daProd = new OleDbDataAdapter(sqlProd, con); 
DataTable dtProd = new DataTable(); 
daProd.Fill(dtProd); 

OleDbDataAdapter daOrders = new OleDbDataAdapter(sqlOrders, con); 
DataTable dtOrders = new DataTable(); 
daOrders.Fill(dtOrders); 

con.Close(); 

但是,當我試圖調用相同代碼該函數通過傳遞從asp.net文件上傳控件中檢索到的文件路徑不起作用。請參閱下面的代碼。

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     if (fupPath.HasFile) 
     { 

      string filename = Path.GetFileName(fupPath.FileName); 
      String csv_file_path = Path.Combine(Server.MapPath("~/Csv"), filename); 
      fupPath.SaveAs(csv_file_path); 

      Summery(csv_file_path); 

      DataTable csvData = GetDataTabletFromCSVFile(csv_file_path); 
      Response.Write("Rows count:" + csvData.Rows.Count); 
      //dtSummary(csvData); 
     } 
    } 

    protected void Summery(string fileName) 
    { 
     //string fileDirectory = @"C:\TechnicalTest\GskTest\Csv\SampleData.csv"; 

     string fileDirectory = fileName; 
     //string strCSVConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
     //   + System.IO.Path.GetDirectoryName(fileDirectory) + ";Extended Properties='text;HDR=YES;FMT=Delimited\'"; 

     string sqlCust = "Select Count(order_id), order_id, contact_id from SampleData.csv " 
     + "Group by order_id, contact_id " 
     + "Order by 1 Desc"; 

     string sqlProd = "Select Count(order_id), product_id from SampleData.csv " 
     + "Group by product_id " 
     + "Order by 1 Desc"; 

     string sqlOrders = "Select Count(order_id) from SampleData.csv " 
     + "Order by 1 Desc"; 

     OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(fileDirectory) + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\""); 
     //OleDbConnection conn = new OleDbConnection(strCSVConnString); 
     conn.Open(); 

     OleDbDataAdapter daCust = new OleDbDataAdapter(sqlCust, conn); 
     DataTable dtCust = new DataTable(); 
     daCust.Fill(dtCust); 
     daCust.Dispose(); 

     OleDbDataAdapter daProd = new OleDbDataAdapter(sqlProd, conn); 
     DataTable dtProd = new DataTable(); 
     daProd.Fill(dtProd); 
     daProd.Dispose(); 

     OleDbDataAdapter daOrders = new OleDbDataAdapter(sqlOrders, conn); 
     DataTable dtOrders = new DataTable(); 
     daOrders.Fill(dtOrders); 
     daOrders.Dispose(); 

     conn.Close(); 
    } 

回答

0

你需要調用一個工作表名稱,而不是SheetName$文件名SampleData.csv的。

例如,

Select Count(order_id), order_id, contact_id from [SheetName$] 

正常情況下,這裏是你如何得到一個文件路徑在ASP.Net,因爲你不知道你的Web應用程序託管的盤符。另外,您無權訪問位於Web應用程序之外的文件。

var filePath = string.Format("{0}App_Data\\ExportImport\\{1}", 
    HttpRuntime.AppDomainAppPath, "SampleData.csv"); 
+0

但它在頁面加載事件中工作正常。當我使用string fileDirectory = @「C:\ TechnicalTest \ GskTest \ Csv \ SampleData.csv」時它工作正常。但是,當我通過字符串變量傳遞相同的路徑功能它不起作用 – user3230171

+0

我更新了答案。 – Win

+0

我的物理路徑是'@「C:\ TechnicalTest \ GskTest \ Csv \ SampleData.csv」'你能幫我解決這個問題 – user3230171

相關問題