我们正在制作一个相当严肃的应用程序,需要与客户想要使用的数据库保持无关.最初我们计划支持MySQL,Oracle和SQL Server.表和视图和查询一样简单(没有真正奇特的SQL),因此问题是:
显然,选项2不涉及开销,但我认为性能不如原生访问那么大?
我知道这个问题有十几个答案和帖子,但没有什么对我有用.
我有我的MVC 5应用程序,我将它部署到IIS 7.5到我的服务器.应用程序运行良好,一切正常,直到我转到Action,我使用ACE.OLEDB.
我收到这个错误:
[InvalidOperationException: The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.]
System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) +1785474
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +1802032
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +100
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) +61
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +964
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6785863
System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +27
System.Data.OleDb.OleDbConnection.Open() +47
QuickbookUploadFromElite3e.Controllers.HomeController.Matters(String filePath) in c:\Users\alex.chakhau\Documents\Visual Studio 2013\Projects\QuickbookUploadFromElite3e\QuickbookUploadFromElite3e\Controllers\HomeController.cs:75
lambda_method(Closure , ControllerBase …Run Code Online (Sandbox Code Playgroud) 我正在开发一个简化日志记录的小应用程序,它通过OleDB向MS Access数据库添加一些输入来实现.
let private conn = new OleDbConnection(connectionString)
let private submitCmd date wins =
let cmd = new OleDbCommand("INSERT INTO ArenaStats ([Date], [Wins]) VALUES (@Date, @Wins)",
Connection = conn, CommandType = CommandType.Text)
["@Date", box date; "@Wins", box wins]
|> List.iter (cmd.Parameters.AddWithValue >> ignore)
cmd
let private submit date wins =
try
conn.Open()
(submitCmd date wins).ExecuteNonQuery() |> ignore
finally
conn.Close()
[<CompiledName "AddEntry">]
let addEntry(date:DateTime, wins:int) =
submit date wins
Run Code Online (Sandbox Code Playgroud)
现在通过FSI进行测试就像预期的那样.但是,当我从C#WPF项目中使用此API时,它会抛出一个SEHExceptionat conn.Open().我真的很想知道为什么会这样.
编辑
正如所建议的那样,我也尝试在C#中实现相同的代码,并且在同一个项目中,它会在同一个地方抛出相同的异常,但我发布下面的代码以供参考.
class MsAccessDatabase : IArenaWinsDatabase { …Run Code Online (Sandbox Code Playgroud) 我有一个x64应用程序,它使用Microsoft.ACE.OLEDB.12.0提供程序在Windows 7(x64)上读取MS Access数据库,它工作正常(安装了Office 2010).
在安装了Office 2013的Windows 8下运行的同一应用程序失败,并显示一条消息,指出提供程序无法打开以前的版本.
在安装了Office 2013的Windows 8下,还有Microsoft.ACE.OLEDB.15.0,但我已经仔细检查了我的代码并确定它在连接字符串中指定了12.0.
这个提供商有不同的"版本" - 或者有什么我错过了吗?
我已经在Windows 8下重新编译了一个使用x86平台的测试程序,并将提供程序更改为Microsoft.Jet.OLEDB.4.0并且它再次运行.不幸的是,该模块是一个更大的生态系统的一部分,需要能够在x64下运行(特别是插入到excel),并且该套件通过应用程序从供应商的网站下载访问数据库,因此它是转换数据库或将所有内容更改为x86不切实际.
提前致谢.
如果我尝试将日期时间写入MS-Access数据库中的记录,就像这样简单
cmd.CommandText = "INSERT INTO [table] ([date]) VALUES (?)";
cmd.Parameters.AddWithValue("?", DateTime.Now);
Run Code Online (Sandbox Code Playgroud)
我得到一个例外,说"条件表达式中的数据类型不匹配".
谁能告诉我为什么?这里出了什么问题?
经过一些实验,我发现如果我写作,我可以使它工作
OleDbParameter parm = new OleDbParameter("?", OleDbType.Date);
parm.Value = DateTime.Now;
cmd.Parameters.Add(parm);
Run Code Online (Sandbox Code Playgroud)
但这样做似乎不那么整洁,不那么简单.为什么这有必要?我忽略了简单的事情吗?
我正在尝试运行在Windows Server 2008上使用RDS(远程数据服务)的经典asp应用程序
<object id="RDS_ACCOUNTS" CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
height=1 width=1 VIEWASTEXT>
Run Code Online (Sandbox Code Playgroud)
以下是window_load()事件中编写的代码
RDS_ACCOUNTS.ExecuteOptions = 1
RDS_ACCOUNTS.FetchOptions = 1
RDS_ACCOUNTS.Server = "<%=strServer%>"
RDS_ACCOUNTS.Connect =Connect
RDS_ACCOUNTS.SQL = "SELECT ACCOUNT_TYPE_ID, CLIENT_ID, ACCOUNT_TYPE_DESC
FROM TBL_AP_CHART_ACCOUNT_TYPE
WHERE CLIENT_ID=<% = Session("ClientID")%>
ORDER BY ACCOUNT_TYPE_DESC "
RDS_ACCOUNTS.Refresh
Dim AccountRst
Set AccountRst = RDS_ACCOUNTS.Recordset
Run Code Online (Sandbox Code Playgroud)
这里connect变量的值来自RDSConn.inc文件,该文件具有值
Handler=MSDFMAP.Handler;Data Source=AMTAPP;
Run Code Online (Sandbox Code Playgroud)
此处理程序从位于C:\Windows包含OLEDB Connection String或DSN名称的文件夹中的msdfmap.ini文件中选择值.但是,当我运行此代码时,它给了我例外
对象或提供程序无法在RDS_ACCOUNTS.Refresh方法上执行请求的操作.
在我的c#应用程序中,我使用OLEDB连接字符串" Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.xls;Extended Properties=\"Excel 8.0;HDR=NO;ReadOnly=true;IMEX=1\""来读取Excel文件.为了读取受密码保护的文件,我尝试在连接字符串中添加密码字段但无法读取文件.我想知道有没有办法使用OLEDB读取密码保护的Excel文件,如果我事先知道它的密码.
我正在尝试使用System.Data.OleDb.OleDbConnection连接到Access数据库文件.我需要以只读模式连接,因为另一个应用程序同时使用它.我可以在读/写连接到数据库没有问题,但似乎无法找到任何正确的readonly字符串.
我试过了:
Provider = Microsoft.ACE.OLEDB.12.0;数据源= {0};持久安全信息=假;模式=读取
Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {0}; Persist Security Info = False; Extended Properties ="ReadOnly = true;"
谢谢.
编辑:
(我应该在原始问题中提供更多信息.)
我可以在本地计算机上成功连接到访问数据库,但是当我尝试使用连接字符串连接到远程计算机上的访问数据库时
Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;Mode=Read
Run Code Online (Sandbox Code Playgroud)
我会收到以下错误:
System.Data.OleDb.OleDbException (0x80004005): The Microsoft Office Access database engine cannot open or write to the file '{0}'. It is already opened exclusively by another user, or you need permission to view and write its data.
Run Code Online (Sandbox Code Playgroud)
我的应用程序在本地系统帐户下的Windows服务中运行.
我需要读取XLSX文件并从中提取最大量的内容.我应该使用哪种API?
OLE DB,打开XML SDK或Excel Interop?
我有一个大问题:我必须连接(我只想读取数据,而不是写入)到我的客户的IBM AS/400(也就是iSeries,现在是IBM i)服务器......
我想我需要所有参数(由AS/400程序员给我),但我无法弄清楚我必须使用哪个驱动程序,以及我是否需要所有软件!
我已经安装了IBM AS/400 ClientAccess 5.8驱动程序(带有最新操作系统的补丁),现在我正在尝试Linked Server在我的Sql Server 2008 R2(x64)服务器中配置一个新的.
第一个问题:我应该使用哪个驱动程序?
我有很多选择(但也许这些都没有!):
IBM DB2 UDB for iSeries IBMDASQL OLE DB Provider
IBM DB2 UDB for iSeries IBMDA400 OLE DB Provider
IBM DB2 UDB for iSeries IBMDARLA OLE DB Provider
Run Code Online (Sandbox Code Playgroud)
......或者其他通用OLEDB/ODBC驱动程序?!
第二个问题:我应该在哪里放置参数(我的意思是哪个字段!)
无论如何,在我为我选择一个提供者时Linked Server,显然我必须设置我的参数......但我只有这个:
ACG_DATV2)第三个问题:我该如何撰写查询?如何引用AS/400"存档"和表?
我不知道如何构建我的阅读查询:表和视图(?!)存储在哪里以及如何引用它们?
先感谢您!
sql-server oledb database-connection linked-server ibm-midrange
oledb ×10
c# ×6
ms-access ×4
excel ×2
64-bit ×1
asp-classic ×1
asp.net-mvc ×1
database ×1
deployment ×1
f# ×1
ibm-midrange ×1
mysql ×1
odbc ×1
office-2013 ×1
openxml ×1
oracle ×1
rds ×1
sql-server ×1
vbscript ×1
windows-8 ×1