因此,我試圖做的是從我的數據庫中讀取選擇存儲過程,將數據保存在csv文件中,並使用戶能夠通過Web應用程序下載它。我能夠通過將文件臨時保存到我的程序foldel並使用文件流來獲得所需的結果。我現在要做的是跳過保存文件的部分到我的電腦上,然後暫時保存在RAM內存中。從我理解我必須使用內存流而不是文件流,但我真的不明白我能做到這一點。從我所瞭解的是我讀到的是,而不是我使用一個文件,我需要將我的數據轉換爲字節使內存流出來,然後在我的FileStreamResult中使用它。我在這裏糾正?如何利用內存流而不是文件流
方法,當我從程序讀取並保存到csvfile:
public static String StoreApproved()
{
string path1 = HttpRuntime.AppDomainAppPath + "Report.csv";
SqlConnection sqlConnection1 = new SqlConnection("CONNECTIONSTRING");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
cmd.CommandText = "ExportApproved";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
reader = cmd.ExecuteReader();
List<ModelStoreProcedureApproved> TestList = new List<ModelStoreProcedureApproved>();
ModelStoreProcedureApproved test ;
while (reader.Read())
{
test = new ModelStoreProcedureApproved();
// test.Id = int.Parse(reader["IdTimeTracker"].ToString());
test.Month = reader["Month"].ToString();
test.EmailUser = reader["Email"].ToString();
test.Project = reader["Name"].ToString();
test.Approved = reader["Description"].ToString();
test.Month = reader["Month"].ToString();
test.Year = reader["Year"].ToString();
TestList.Add(test);
}
File.Create(path1).Close();
var i = TestList.FirstOrDefault();
using (TextWriter fileReader = new StreamWriter(path1))
{
var csv = new CsvWriter(fileReader);
csv.Configuration.Encoding = Encoding.UTF8;
foreach (var value in TestList)
{
csv.WriteRecord(value);
}
fileReader.Close();
}
sqlConnection1.Close();
return path1;
}
控制器代碼:
public ActionResult ExportToCSV()
{
string path = Repositories.UserRepository.StoreApproved();
var fileStream = new FileStream(path,
FileMode.Open,
FileAccess.Read);
return new FileStreamResult(fileStream, "text/csv") { FileDownloadName = "export.csv" };
}
有人可以解釋我怎麼做到這一點的最好辦法是什麼? 其他職位我讀 Serialize and Deserialize using BinaryFormatter
BinaryFormatter and Deserialization Complex objects
Using CSVHelper to output stream to browser
我得到一個exeption說:System.ObjectDisposedException:無法訪問封閉的流。 –
嘗試使用字節,然後不知道爲什麼發生。我更新了代碼以使用字節來傳遞結果。 –
工作!非常感謝你。當它允許我批准答案時 –