2012-07-23 47 views
4

我在我的asp.net(c#)網站上有一個文件上傳控件,用於上傳帶有要插入數據庫的數據的csv文件,我的問題是,我無法獲得上傳文件有沒有辦法在c#中查詢流,例如。 select * from一個流對象

的實際路徑它總是給我:C:\inetput\projectfolder\csvname.csv 它應該是類似於:C:\Documents and settings\Pcname\Desktop\csvname.csv

而是通過各種後處理文件上傳的打算,我才知道,文件需要首先保存在服務器上,

使用Fileupload1.Saveas(savepath);

這是必需將文件保存在先前指定的位置,這實際上並不需要。 (因爲它會增加再次刪除文件的開銷)。

那麼我要做的就是如下:

bool result = true; 
strm = FileUpload1.PostedFile.InputStream; 

reader2 = new System.IO.StreamReader(strm); 

// **** new **** 

FileInfo fileinfo = new FileInfo(FileUpload1.PostedFile.FileName); 


string savePath = "c:\\"; // example "c:\\temp\\uploads\\"; could be any path 

string fileName = fileinfo.Name; 
string strFilePath = savePath.ToString(); 


savePath += fileName; 

FileUpload1.SaveAs(savePath); 

string strSql = "SELECT * FROM [" + fileinfo.Name + "]"; 

string strCSVConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFilePath + ";" + "Extended Properties='text;HDR=NO;'"; 

// load the data from CSV to DataTable 

OleDbDataAdapter oleda = new OleDbDataAdapter(strSql, strCSVConnString); 

DataTable dtbCSV = new DataTable(); 

oleda.Fill(dtbCSV); 

if (dtbCSV.Columns.Count != 2) 
{ 
    result = false; 
} 

,因爲我想算列的文件的數量,我使用的OLEDB讀者。 需要查詢文件。

是否可以查詢流?我不想保存文件,而只是讀取它而不保存。

+1

你不能查詢Streamreader的數據..你必須先保存文件... – 2012-07-23 12:05:33

回答

1

不幸的是,你不能對流使用OLEDB。

在強制使用OLEDB的情況下,我設法編寫了一個IDisposable包裝器,它可以提供流中的臨時文件並管理刪除操作。

然而,您可以選擇另一種方式來讀取內容,而不保存它,例如直接從流中解析文件。由於避免了文件訪問限制問題以及文件訪問開銷,因此我會推薦使用這種方法代替包裝。

Here's是一種具有幾種不同方法的SO。

相關問題