OLEDB和ODBC有什么区别?我何时使用哪个?如何知道我在看OLEDB驱动程序v/s ODBC驱动程序?
我正在挖掘一个Linux应用程序,该应用程序应该使用DSN来连接到SQL Server.连接停止工作,我找不到正在使用的凭据(我所知道的只是DSN的名称).
我熟悉Windows中的DSN,但它们是如何创建的以及它们存储在Linux中的哪个位置?
我正在使用RODBC连接到我使用商业数据库的ODBC驱动程序创建的DSN(OSI Soft的PI Historian Time Series DB,如果你很好奇的话).
> library(RODBC)
> piconn <- odbcConnect("PIRV", uid = "pidemo")
> sqlStr <- "SELECT tag, time, status, value FROM piinterp WHERE tag = 'PW1.PLANT1.PRODUCTION_RATE' and time > DATE('-4h') and timestep = '+2m'"
Run Code Online (Sandbox Code Playgroud)
现在,如果我查询,我得到零行.
> sqlQuery(piconn, sqlStr)
[1] TAG TIME STATUS VALUE
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)
有了BelieveNRows = FALSE这些,所有仍然显示零结果,即使它应该返回120行.
> sqlQuery(piconn, sqlStr, believeNRows = FALSE)
> sqlQuery(piconn, sqlStr, believeNRows = FALSE, max = 0)
> sqlQuery(piconn, sqlStr, believeNRows = FALSE, max …Run Code Online (Sandbox Code Playgroud) 我需要从C#绑定ODBC查询的参数.这是示例代码,但VS告诉我缺少一个参数.
OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM user WHERE id = @id";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
ODBC上绑定值的语法是什么?
SQL Server Native Client连接和ODBC连接有什么区别?这两者的优点和缺点是什么?
sql-server odbc database-connection sql-server-2005 sql-server-2008
我正在使用最新的Ubuntu 12.04系统.我有unixodbc(来自ubuntu repos的v2.2.14),安装了MySQL及其相关的驱动程序.还连接到有效的DSN.通过签发验证isql DBName UName passwd.
我正在尝试编译一个使用ODBC与数据库交互的C应用程序.我搜索的几乎所有地方似乎都表明我应该在某处安装"sql.h".A find / -iname sql.h -print表明我没有它.
所以我的问题是:它在哪里?安装出了什么问题(虽然没有报告错误)?你推荐什么步骤?重新安装?从源代码编译(最新版本?)?
我们正在我们的网站上进行一些性能测试,我们收到了以下错误:
*** 'C:\inetpub\foo.plex' log message at: 2008/10/07 13:19:58
DBD::ODBC::st execute failed: [Microsoft][SQL Native Client]String data, right truncation (SQL-22001) at C:\inetpub\foo.plex line 25.
Run Code Online (Sandbox Code Playgroud)
第25行如下:
SELECT DISTINCT top 20 ZIP_CODE, CITY, STATE FROM Zipcodes WHERE (ZIP_CODE like ?) OR (CITY like ?) ORDER BY ZIP_CODE
Run Code Online (Sandbox Code Playgroud)
最后,这是perl代码.
有任何想法吗?
编辑:这里的问题是我在zip文件中搜索字符串"74523%"太长了.如果他们给出五位数,我最终只是不添加%.
这个wiki帖子概述了问题和解决方案.我想发布这个可能有类似问题的其他人,因为我找不到任何具体的解决方案来解决其他问题.
我们最近将SQL Server 2000数据库升级到SQL Server 2005.服务器上的一个数据库是MS Access数据库的后端.MS Access数据库使用传递查询,通过无DSN的ODBC连接到SQL Server.
无DSN连接字符串的示例如下所示:
ODBC; DRIVER=SQL Server;SERVER=servername;APP=Microsoft® Access (Pass Through
Query);DATABASE=databasename;Network=DBMSSOCN;ConnectionTimeout=20;
Trusted_Connection=Yes
Run Code Online (Sandbox Code Playgroud)
升级后,我们发现用户无法运行传递查询,并显示以下错误:
ODBC - 与"SQL Server"的连接失败
这最初似乎是一个权限问题,因为将SQL服务器登录的priveledges提升到sysadmin服务器角色缓解了这个问题(但显然这不是一个很好的解决方案).
从登录sysadmin角色后,我们发现当通过Management Studio连接到SQL Server时,登录可以执行存储过程.MS Access中无法进行相同的登录.这指向了MS Access在尝试执行存储过程时所做的事情 - 而不是权限问题.
我们使用Profiler在服务器上运行了一个跟踪,这显示MS Access试图在存储的proc执行之前执行以下命令:
DBCC TRACEON(208)
Run Code Online (Sandbox Code Playgroud)
在存储过程执行之前,它似乎在此命令失败.对Web的研究表明,DBCC TRACEON(208)相当于使用'SET QUOTED IDENTIFIERS ON'命令,并且在SQL 2005中,运行此DBCC命令的priveledges已被撤销.
经过进一步研究,我们发现对MS Query的引用存在类似的问题,并且连接字符串的APP组件应该从"MS Query"更改为其他内容.
在预感中,我们更改了ODBC连接字符串的APP组件,并且MS Access在存储过程执行之前不再尝试执行DBCC TRACEON(208).
经过进一步测试,我们将问题跟踪到APP组件中包含的"版权"符号:
APP=Microsoft® Access (Pass Through Query)
Run Code Online (Sandbox Code Playgroud)
通过删除版权符号,一切都很好的连接和应用程序工作,就像以前在SQL 2000上所做的那样.
希望这可以帮助其他有类似问题的人.
我想手动安装MS Access 64位odbc驱动程序.由于我们公司使用的加载项,卸载32位Office并安装64位Office不是一种选择.
我下载了AccessDatabaseEngine_x64.exe并使用WinRar和Universal Extractor设法将所有文件解压缩到临时目录中.我相信我拥有所有必要的文件,但有点不确定从哪里开始,并希望得到一些指导.
需要注册哪些DLL才能使64位ODBC管理员中的MS Access ODBC驱动程序可用?
是否有我需要提供的注册表项列表才能使其可用?
有没有其他人以合理的方式处理这件事?
先感谢您!
SQLGetDiagRec返回本机错误代码.是否有任何概述SQL Server 2012的错误代码?我在MSDN上找不到任何东西.