gpt4 book ai didi

asp.net - 有没有办法在 c# 中查询流,例如。从流对象中选择 *

转载 作者:行者123 更新时间:2023-12-01 05:30:12 24 4
gpt4 key购买 nike

我的 asp.net (c#) 网站中有一个文件上传控件,用于上传带有要插入数据库的数据的 csv 文件,我的问题是,我无法获取上传文件的实际路径

它总是给我: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 阅读器。
这需要一个文件来查询。

是否可以查询流?我不想保存文件,而是直接阅读而不保存。

最佳答案

不幸的是,您不能对流使用 OLEDB。

在强制使用 OLEDB 的情况下,我设法写了一个 IDisposable将从流中提供临时文件并管理删除的包装器。

但是,您可以采用另一种方法来读取内容,而不保存它,例如直接从流中自己解析文件。我会推荐它而不是包装器,因为您可以避免文件访问限制问题以及文件访问的开销。

Here's具有多种不同方法的 SO。

关于asp.net - 有没有办法在 c# 中查询流,例如。从流对象中选择 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com