我正在寻找一种适当的抽象方法来从C#中获取系统中的ODBC数据源列表.我已经尝试了"在注册表中寻找"技巧,我发现它在英语中运行良好:
RegistryKey reg = (Registry.CurrentUser).OpenSubKey("Software");
reg = reg.OpenSubKey("ODBC");
reg = reg.OpenSubKey("ODBC.INI");
reg = reg.OpenSubKey("ODBC Data Sources");
and then, of course, iterating over reg.GetValueNames()
Run Code Online (Sandbox Code Playgroud)
唯一的问题是我在至少一台西班牙语机器上发现他们的注册表键是西班牙语,所以显然违反这种抽象(如果存在)已经让我陷入困境.
是否有库函数来执行此操作?
我可以创建一个Access mdb并通过ODBC将链接表添加到Sql Server数据库.如果我使用ODBC控制面板小程序更改ODBC连接的Sql Server,则mdb仍会连接到原始Sql Server,直到重新启动Access.
有没有办法重新链接这些链接的服务器表而不重新启动Access?
编辑:我想在代码中这样做
使用ORACLE 10g时遇到了这个问题.我在这里阅读了这个问题的答案(ora-00972标识符太长了oracle 10g)堆栈溢出但它们没有为我工作.也许我的情况有所不同.
现在我有这些表名:WIMAX_TRAFFIC_STATS 和WIMAX_RADIO_STATS.当我尝试通过ODBC连接将数据插入到它们时Erlang/OTP,我得到了错误:
{error,"[DataDirect][ODBC Oracle Wire Protocol driver][Oracle]ORA-00972:
identifier is toolong SQLSTATE IS: HY000"}
所以,我搜索谷歌并找到答案说,也许我的表名太长了.所以我在下面做了这个并再次尝试:SQL> ALTER TABLE WIMAX_RADIO_STATS RENAME TO WR; Table altered. SQL> ALTER TABLE WIMAX_TRAFFIC_STATS RENAME TO WT; Table altered.我仍然得到同样的错误.其他来源sya,它可能是我在我的一些专栏中写的数据.我的表定义如下:
SQL> DESCRIBE WT; Name Null? Type ----------------------------------------- -------- ----------------- SDATE DATE ELEMENT_TYPE VARCHAR2(50) MANAGED_ELEMENT VARCHAR2(50) USER_LABEL VARCHAR2(200) JOB_ID VARCHAR2(50) MEAS_TYPE VARCHAR2(50) MEAS_VALUE VARCHAR2(50)
我在那里写的数据值都不比列长度定义长.我真的好奇.我试图在表中编写长度小于10个字符但仍然出现此错误的字符串.请帮助一些身体!
EDIT
SAMPLE查询请求如下:
INSERT INTO WT(element_type,managed_element,user_label,job_id,meas_type,
meas_value) VALUES("BreezeMAX MBS",
"SubNetwork=ASN,MeContext=,ManagedElement=MBS.172.17.9.9",
"BMAX-Shoal2[MTN-Egate]",
"99297","rbMngmntPortPacketsDiscardedOnRx","0"); …
我已经知道,odbc_execute()当它返回时并不总是触发正确的ODBC错误FALSE(至少不是Oracle驱动程序),我无法完全信任odbc_error()或odbc_errormsg().当没有先前的错误因为odbc_error()返回空字符串时,很容易检测到这种情况.但是,当它返回一些东西时,我不知道它是否属于最后一次失败的操作,或者它是前一个错误的遗留物.
最简单的解决办法是重置的odbc_error()和odbc_errormsg()函数时有一个错误,以便下一次调用将从头开始,但我无法找到一个支持的方式这样做.你能找到办法吗?
背景:我正在使用封装数据库调用的类来增强遗留应用程序.这就是为什么我需要尽可能地使一切都变得通用.
我现在用Google搜索了几个小时.
我读过无数文章,例如:Access是否有Windows 7 ODBC驱动程序?
我尝试过使用ODBC管理员 - 并且已成功为两者添加系统DSN:
当我尝试连接到本地存储的Access DB时:
odbc_connect('Aquarius2', '', '');
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
odbc_connect():SQL错误:[Microsoft] [ODBC驱动程序管理器]指定的DSN包含驱动程序和应用程序之间的体系结构不匹配,第3行的C:\ export\export.php中的SQLConnect中的SQL状态IM014
简单脚本尝试安装最新的访问驱动程序 - Aquarius2我的DSN名称仍然失败.
我没有想法 - 我错过了什么?
问候,亚历克斯
有没有人知道如果正确配置odbc.ini文件上的odbc条目的方法?
我想知道我的linux服务器是否能够使用我配置的ODBC条目连接到我的SQL Server.
所以我试图将二进制文件转换为字符串.这段代码:
t = [{<<71,0,69,0,84,0>>}]
String.from_char_list(t)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这种转换时,我得到了这个:
** (ArgumentError) argument error
(stdlib) :unicode.characters_to_binary([{<<70, 0, 73, 0, 78, 0>>}])
(elixir) lib/string.ex:1161: String.from_char_list/1
Run Code Online (Sandbox Code Playgroud)
我假设<< 70,0等可能是一个字形列表(它是API调用的返回,并且API没有完全记录)但我是否需要以某种方式指定编码?
我知道我可能会遗漏一些明显的东西(也许这不是正确的功能?)但我似乎无法弄清楚该怎么做.
编辑:
对于它的价值,上面的二进制文件是Erlang ODBC调用的返回值.经过一番挖掘后,我发现有问题的二进制文件实际上是"编码为UTF16小端的Unicode二进制文件"(参见此处:http://www.erlang.org/doc/apps/odbc/odbc.pdf第9页) re:SQL_WVARCHAR)并没有真正改变问题,但它确实添加了一些上下文.
我有一个ODBC连接的问题,该连接应该连接到Excel表并用它做一些事情.我已经在网上看了很多关于它的东西,但没有一个解决方案帮助了我(包括stackoverflow).
所以基本上我正处于试图打开表连接的地步.
private static SortedList<string, School> generateSchoolListExcel(string listFilePath)
{
StringBuilder con = new StringBuilder();
OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Data Source", listFilePath);
OdbcConnectionStringBuilder.AppendKeyValuePair(con, "HDR", "yes");
OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Format", "xlsx");
OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Driver", "{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}");
//I have tried to specify driver without parentheses {} but it's still the same
List<School> schoolList = new List<School>();
using (OdbcConnection excel = new OdbcConnection(con.ToString()))
{
excel.Open();
//doing actuall stuff
}
return schoolList;
}
Run Code Online (Sandbox Code Playgroud)
当我调用该excel.Open()方法时,我收到OdbcException消息:
错误[IM002] [Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序",这很奇怪,因为我在名为con的字符串中指定了那些.
还值得一提的是,在ODBC数据源管理器中,我可以清楚地看到我已经安装并运行了这些驱动程序.
还有一个奇怪的部分.当我调用我在stackoverflow上找到的以下方法时,它返回以下驱动程序列表:
- "驱动程序da Microsoft para …
我已经在CentOS 7 VPS中安装了PHP 5.4.我现在正在尝试使用PHP脚本访问.mdb格式的旧数据库.
然而,我的phpinfo()页说,只有mysql和sqlitePDO驱动程序启用.没有启用名为ODBC的驱动程序.
这就是为什么我试图按照本教程来实现它的原因.但它不起作用.bash: ./configure: No such file or directory.
我不知道从哪个文件夹运行那里列出的命令.是否有一个命令允许我从系统安装PDO ODBC驱动程序,例如yum -y install php_odbc哪个更容易让我使用?如果没有,我做错了什么?
我知道这个问题被多次询问,但我已经尝试了所有但没有任何效果.我试图连接到与Ubuntu 14.04不同的服务器上的MSSQL数据库.
来自/etc/odbcinst.in的内容
[ODBC]
Trace = No
TraceFile = /tmp/odbc.log
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount = 1
fileusage=1
dontdlclose=1
Run Code Online (Sandbox Code Playgroud)
来自/etc/odbc.in的内容
[mssql]
Driver = FreeTDS
ServerName = mssql
Port = 1433
Database = My Database //database has space
Driver=/usr/local/lib/libtdsodbc.so
UsageCount = 1
TDS_Version = 7.3
instance = SQLEXPRESS
[Default]
Driver=/usr/local/lib/libtdsodbc.so
Run Code Online (Sandbox Code Playgroud)
和/etc/freetds/freetds.conf中的mssql部分
[mssql]
host = server ip
port = 1433
database = My Databas
instance = SQLEXPRESS
tds version = 7.3
client charset = UTF-8
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时,它会生成增加的数字 …