需要通过oledb连接从azure存储blob容器读取excel文件

本文关键字:blob 读取 文件 excel 存储 azure oledb 连接 | 更新日期: 2023-09-27 18:00:49

我已将我的网站托管到azure中。。。我已经通过中间服务器将Excel文件上传到azure存储blob容器中,因为我无法直接从网站访问azure。。所以我需要的是,我需要使用"oledb连接"从azure存储blob容器(或(中间服务器本地路径读取excel文件,并将其存储到数据表中以验证excel。。有人能帮我继续吗。

需要通过oledb连接从azure存储blob容器读取excel文件

您从未将问题编辑为显示代码,并且您错误发布的作为答案的代码已被删除,所以我在这里进行猜测,但是。。。我可以肯定的是,问题是您试图通过OleDbConnection将blob作为文件打开。

Azure存储Blob无法作为文件打开。如果你要像文件一样使用blob的内容,你首先需要下载它并将其保存为文件(或者使用内存流,但在你的情况下,你需要一个文件(。然后,您可以像往常一样打开文件。

由于您在基于Azure的Web应用程序中运行代码,因此理想情况下,您希望Web应用程序与存储帐户位于同一区域。你将下载到网络应用程序的本地磁盘(网络应用程序为你提供了本地存储空间(。

操作完文件后,您需要将其上传回blob。

public string[] GetExcelSheets(string filename)
        {
            String[] excelSheets = null;
            StorageCredentials creds = new StorageCredentials("<accountname>", "<key>");
            CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
            CloudBlobClient blobClient = account.CreateCloudBlobClient();
            CloudBlobContainer blobContainer = blobClient.GetContainerReference("documents");
            blobContainer.CreateIfNotExists();
           blobContainer.SetPermissions(new BlobContainerPermissions
{  PublicAccess = BlobContainerPublicAccessType.Blob
            });
            CloudBlockBlob blob1 = blobContainer.GetBlockBlobReference(filename);
            try
            {
                using (var stream = blob1.OpenRead())
                {
                    OleDbConnection connection = new OleDbConnection();
                    var localPath = @"https://xxyyyyyyyyyyy.blob.core.windows.net/";
                    var fileName = @"C:'xxx" + @"'" + "9370.XLS";
                    var fullPathToFile = System.IO.Path.Combine(localPath, fileName);
                    string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + fileName + "';Extended Properties=Excel 8.0";
                   OleDbConnection oledbConn = new OleDbConnection(connString);
                    DataTable dt = new DataTable();
                    if (oledbConn.State == ConnectionState.Closed) oledbConn.Open();
                    // Get the data table containg the schema guid.
                    dt = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    oledbConn.Close();
                    if (dt == null) return null;
                    excelSheets = new String[dt.Rows.Count];
                    int i = 0;
                    // Add the sheet name to the string array.
                    foreach (DataRow row in dt.Rows)
                    {
                        excel Sheets[i] = row["TABLE_NAME"].ToString();
                        i++;
                    }
                }
            }
            catch (Exception ex)
            {
                HTTP Context.Current.Res`enter code here`ponse.Write(ex.Message);
            }
            return excel Sheets; }
this is the code i used to read the excel file but oledb data-source path is incorrect...can u suggest what path i should use to read the excel file in azure blob container