Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Oledb在C中以只读模式编写connectstring以读取excel#_C#_Asp.net_Excel - Fatal编程技术网

C# 如何使用Oledb在C中以只读模式编写connectstring以读取excel#

C# 如何使用Oledb在C中以只读模式编写connectstring以读取excel#,c#,asp.net,excel,C#,Asp.net,Excel,connectionstring中的Mode=Read应表明这是只读模式,允许多应用程序读取单个excel而无需写入。 但它在\u conn.Open()中抛出异常,所以我想可能是我的连接字符串错了 以下是异常消息 string _filePath = @"C:\Users\szhao\Downloads\USER_UploadCSV.xlsx"; FileInfo fi = new FileInfo(_filePath); string _connectionStrin

connectionstring中的
Mode=Read
应表明这是只读模式,允许多应用程序读取单个excel而无需写入。 但它在
\u conn.Open()中抛出异常,所以我想可能是我的连接字符串错了

以下是异常消息

    string _filePath = @"C:\Users\szhao\Downloads\USER_UploadCSV.xlsx";
    FileInfo fi = new FileInfo(_filePath);
    string _connectionString = "Provider=Microsoft.JET.OLEDB.4.0;Mode=Read;Data Source=" + _filePath + "; Extended Properties=\"Excel 8.0;HDR=Yes;\"";
    if (fi.Extension.Equals(".xlsx") || fi.Extension.Equals(".xls"))
    {
        // For Excel 2007 File  Format
        _connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Data Source=" + _filePath + " ;Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"";
    }
    OleDbConnection _conn = new OleDbConnection(_connectionString);
    _conn.Open();
    Console.WriteLine("Connect!");

如果我删除Mode=Read,它将不允许多应用程序读取,但单用户可以使用。

xls和xlsx的连接字符串是不同的

Exception Message:
External table is not in the expected format.

Stack Trace:
   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()
   at TIDEAPI.BLL.AExcelFile..ctor(TestAdministration pTestAdministration, String pFilePath, UploadFileSpecification pUploadFileSpecification) in c:\Projects\PreProcessing\TIDE\Online\TIDEAPI\BLL\FileUpload\Abstraction\AExcelFile.cs:line 41
   at TIDEAPI.BLL.ExcelFile..ctor(TestAdministration pTestAdministration, String pFilePath, UploadFileSpecification pUploadFileSpecification) in c:\Projects\PreProcessing\TIDE\Online\TIDEAPI\BLL\FileUpload\ExcelFile.cs:line 14
   at TIDEAPI.BLL.AcceptableFileFactory.GetAcceptableFile(TestAdministration pTestAdministration, String pFilePath, UploadFileSpecification pUploadFileSpecification) in c:\Projects\PreProcessing\TIDE\Online\TIDEAPI\BLL\FileUpload\AcceptableFileFactory.cs:line 22
   at TIDEAPI.BLL.AFileProcessor..ctor(Int64 pTestAdministartionKey, String pFilePath, UploadFileSpecification pUploadFileSpecification, FrequencyDistributionLogger fdLogger, DataExchangeErrorLogger errorLogger, IDictionary`2 dataExchangeProperties) in c:\Projects\PreProcessing\TIDE\Online\TIDEAPI\BLL\FileUpload\Abstraction\AFileProcessor.cs:line 108
   at TIDEAPI.BLL.UserFileProcessor..ctor(Int64 pTestAdministrationKey, String pTideFile, UploadFileSpecification pUploadFileSpecification, FrequencyDistributionLogger fdLogger, DataExchangeErrorLogger errorLogger, IDictionary`2 dataExchangeProperties) in c:\Projects\PreProcessing\TIDE\Online\TIDEAPI\BLL\FileUpload\UserFileProcessor.cs:line 32
   at TIDEAPI.BLL.FileProcessorFactory.GetFileProcessor(Int64 pTestAdministrationKey, String pFilePath, UploadFileSpecification pUploadFileSpecification, FrequencyDistributionLogger fdLogger, DataExchangeErrorLogger errorLogger, FileProcessorTypes pFileProcessorType, IDictionary`2 dataExchangeProperties) in c:\Projects\PreProcessing\TIDE\Online\TIDEAPI\BLL\FileUpload\FileProcessorFactory.cs:line 42
   at PreIdService.PreIdFile.Load(Object pWorkerThreadParameters) in c:\Projects\PreProcessing\TIDE\Online\Tools\TideBatchUploadService\PreIdFile.cs:line 62

如果删除
Mode=Read
它是否正常工作?如果删除Mode=Read,它将不允许多个应用程序读取,但单个用户将正常工作。尝试在
Mode=Read
之外添加
ReadOnly=True
。www.connectionstrings.com
if (fi.Extension.Equals(".xls"))
{
   _connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
       _filePath + " ;Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"";
}
else if (fi.Extension.Equals(".xlsx"))
{
   _connectionString = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + 
       _filePath + " ;Extended Properties=\"Excel 12.0;HDR=No;IMEX=1\"";
}