我正在使用以下方法阅读应用程序中excel表的内容:
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0");
_myDataSet = new DataSet();
OleDbDataAdapter myCommand = new OleDbDataAdapter(" SELECT * FROM [" + "My Sheet" + "$]", con);
myCommand.Fill(_myDataSet);
con.Close();
Run Code Online (Sandbox Code Playgroud)
这在64位系统中失败并出现错误:
Microsoft.Jet.OLEDB.4.0'提供程序未在本地计算机上注册
如何在64位机器上工作?
首先,我想说我在这里深水,因为我只是对公司中其他人编写的代码进行了一些更改,使用OleDbDataAdapter与Excel"对话"并且我不熟悉接着就,随即.有一个我无法遵循的错误.
我正在尝试使用OleDbDataAdapter来读取大约450行的excel文件.
在代码中,它是这样做的:
connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source='" + path + "';" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"");
connection.Open();
OleDbDataAdapter objAdapter = new OleDbDataAdapter(objCommand.CommandText, connection);
objAdapter.Fill(objDataSet, "Excel");
foreach (DataColumn dataColumn in objTable.Columns) {
if (dataColumn.Ordinal > objDataSet.Tables[0].Columns.Count - 1) {
objDataSet.Tables[0].Columns.Add();
}
objDataSet.Tables[0].Columns[dataColumn.Ordinal].ColumnName = dataColumn.ColumnName;
objImport.Columns.Add(dataColumn.ColumnName);
}
foreach (DataRow dataRow in objDataSet.Tables[0].Rows) {
...
}
Run Code Online (Sandbox Code Playgroud)
除了一件事,一切似乎都很好.第二列填充了大多数四位数字,如6739,3920等,但是fice行具有字母数字值,如8201NO和8205NO.据报道,这五个细胞具有空白内容而不是其字母数字内容.我已检入excel,此列中的所有单元格都标记为文本.
顺便说一句,这是一个xls文件,而不是xlsx.
有没有人知道为什么这些单元格在DataRow中显示为空白,但数字显示正常?还有其他具有字母数字内容的列显示得很好.
使用.mdb文件作为后端运行多线程(.NET Framework 3.5 SP1 WinForms)桌面应用程序几个小时(约6小时Win7 64位,~24小时WinXP)后,我收到以下运行时错误:
异常 - > 未指定的错误
StackTrace - >
System.Data.OleDb.OleDbConnectionFactory.CreateConnection上的System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr,OleDbConnection连接)
(DbConnectionOptions选项,Object poolGroupProviderInfo,DbConnectionPool池,DbConnection owningObject)在System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection,DbConnectionPoolGroup poolGroup)
在System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
在System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)
在System.Data.OleDb.OleDbConnection.Open()
在NetworkManager.SearchInputFileHandler.GetInputRows(SearchProgramTypeEnumeration programType,Int32 startRowNum,Int32 rowsQty,Boolean setupInProgress,Boolean filterOutUninitializedRows)
看起来这是一个OleDbProvider错误.
你见过/经历过这样的事吗?
语境:
(1)我专门使用
使用(OleDbConnection cnn = new OleDbConnection("{{mymdbConnectionStringHere}}")){
cnn.Open();
...
}
(2)我在一些select SQL表达式中使用IN子句指向外部MDB表.
我想问题是由案例(2)引起的.虽然这仍然是一个假设来检查(我的应用程序的核心代码中需要一些代码修复,我现在考虑是值得修复的,或者我应该更好地切换到MS SQL后端.)
谢谢.
我正在编写一个应用程序,它使用一个OleDbAdapter
访问Excel文件中的信息.当我尝试创建与Excel文件的连接时,如果用户在其桌面上打开了另一个(不相关的)Excel文件,则适配器连接的文件将在此窗口中以只读格式打开.如果用户没有打开Excel实例,则文件将保持隐藏状态.
这是我的代码:
foreach (item app in apps)
{
DataTable dt = new DataTable();
string CnStr = ("Provider=Microsoft.Jet.OLEDB.4.0;" + ("Data Source="
+ ((app.FilePath) + (";" + "Extended Properties=\"Excel 8.0;\""))));
string OleDbString = ("Select * from [" + app.SheetName + "$]");
OleDbDataAdapter Adapter = new OleDbDataAdapter();
var conn = new OleDbConnection(CnStr);
conn.Open(); <----------------------------This is where the files are being opened.
var cmd = new OleDbCommand(OleDbString, conn);
Adapter.SelectCommand = cmd;
Adapter.Fill(app.DataTable);
conn.Close();
Adapter.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
有人知道为什么OleDbConnection()
如果Excel的一个实例是打开的话会打开一个文件,但如果没有,那就不会打开文件?
是否OledbConnection.Dispose()
关闭连接?
我知道那SqlConnection
会怎样OledbConnection
呢?
我收到错误"'Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册." 在我的测试服务器上.所以我的问题是:
i)我可以添加"'Microsoft.ACE.Oledb.12.0.dll'"的引用来自行投影吗?ii)安全吗?iii)怎么做?
因为我的机器上有最新版本的办公室安装,所以我的本地机器上都有工作.一旦我将我的代码部署到测试服务器,我就会遇到错误.我可能无法在测试服务器上安装Office(由于某种原因).那么有可能将所有require dll放在项目本身并将其部署到测试服务器吗?
提前致谢.
我现在面临"未指定的错误"中只有一台PC我的用户.
运行时错误'-2147467259(80004005)':
未指定错误
我正在运行以下VBA代码以打开与位于网络共享驱动器中的Access数据库的连接.但是代码在尝试运行.Open
语句时会抛出错误.
我认为这是一个驱动程序问题,并在用户的PC中安装了Access 2007数据库引擎,并用" Microsoft.ACE.OLEDB.12.0
" 替换了Provider,但它不起作用.
码:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim retVal As Boolean
Dim strSQL As String
retVal = False
On Error GoTo CatchError
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Jet OLEDB:Database Password") = Initialize.GetDBPwd 'returns pass
.Open Initialize.GetDbConnectionString 'returns the network DB path
End With
Run Code Online (Sandbox Code Playgroud) OleDb
我使用下面的代码通过连接来连接到 Access 数据库C# .Net
我如何知道硬编码到程序中的表是否确实存在于文件中,以便我可以向用户显示适当的消息?
try
{
var dbSource = "Data Source = " + source;
const string dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;";
using (var con = new OleDbConnection())
{
con.ConnectionString = dbProvider + dbSource;
con.Open();
using (var cmd = new OleDbCommand())
{
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM [Concrete Design Table 1]";
// How do I know the table name is valid? It results in errors when it is not?
// How to prevent it?
using (var …
Run Code Online (Sandbox Code Playgroud) 我正在阅读一个 excel 文件,我想访问它的内容。我正在使用这个连接字符串:
connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", Server.MapPath(fileName));
Run Code Online (Sandbox Code Playgroud)
但我看到这个错误:
“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册。
我的服务器在 64 位操作系统上运行。我已经在上面安装了 Microsoft Office Professional Plus 2010(32 位)和 Microsoft Access 数据库引擎 2010。
问题是什么?
我已经创建了一个到项目级别的 OLE DB 连接(本机 OLE DB\SQL Server Native Client 11.0)。当我尝试从源助手中使用它时,我在列表中看不到它。但是,如果我选择 OLE DB 源连接,则可以毫无问题地使用它。
可能会发生什么?
我正在使用 Microsoft Visual Studio Community 2019 版本 16.4.2。
oledbconnection ×10
c# ×6
.net ×5
oledb ×5
excel ×3
access-vba ×1
adodb ×1
connection ×1
database ×1
datareader ×1
datatable ×1
dispose ×1
excel-vba ×1
jet ×1
ssis ×1
vba ×1