Tag: odbc

如何在ODBC查询中参数化表名

我有一个到数据库的ODBC连接,我希望用户能够在任何表中查看数据。 由于这是一个ASP.net应用程序,我不能相信发送的表名也不包含恶意内容。 我已经尝试使用参数化查询,但我总是得到一个错误,说我“ 必须声明表变量 ” – 这似乎是一个问题,因为它是表名 string sql = “SELECT TOP 10 * FROM ? “; OdbcCommand command = new OdbcCommand(sql, dbConnection); command.Parameters.Add(new OdbcParameter(“@table”, tableName)); OdbcDataAdapter adapter = new OdbcDataAdapter(); adapter.SelectCommand = command; adapter.Fill(tableData); 以安全的方式实现这一目标的最佳方法是什么?

使用C#中的Odbc调用Oracle包函数

我在Oracle包中定义了一个函数: CREATE OR REPLACE PACKAGE BODY TESTUSER.TESTPKG as FUNCTION testfunc(n IN NUMBER) RETURN NUMBER as begin return n + 1; end testfunc; end testpkg; / 如何使用Odbc从C#调用它? 我尝试了以下方法: using System; using System.Data; using System.Data.Odbc; class Program { static void Main(string[] args) { using (OdbcConnection connection = new OdbcConnection(“DSN=testdb;UID=testuser;PWD=testpwd”)) { connection.Open(); OdbcCommand command = new OdbcCommand(“TESTUSER.TESTPKG.testfunc”, connection); […]

非法尝试使用Text / Byte主变量 – 插入TEXT列

尝试通过Dapper插入表(文本列),并从Informix获取错误: Illegal attempt to use Text/Byte host variable 我已经编写了一个小程序来模拟这个,我仍然面临着问题。 我们目前无法使用Informix驱动程序,因为它们不适合我们的需求。 using Dapper; using System; using System.Data.Odbc; namespace DapperParamsTest { class Program { static void Main(string[] args) { OdbcConnection conn = new System.Data.Odbc.OdbcConnection(“Driver={IBM INFORMIX ODBC DRIVER (64-bit)}; Host=bylgia; Server=bylgia; Service=sqlexec; Protocol=onsoctcp; Database=DATABASE; Client_Locale=en_US.CP1252; DB_LOCALE=en_GB.1252”); var dynParams = new DynamicParameters(); dynParams.Add(“np_c_ref”,-1); dynParams.Add(“np_np_type”,”T”); dynParams.Add(“np_text”, System.Text.Encoding.Default.GetBytes(“TEXT INPUT”), System.Data.DbType.Binary); conn.Execute(“INSERT […]

Odbc连接字符串格式,而不是查找文件

这是一个“双重”问题,可能只有一个答案。 我正在使用带有AS / 400的Odbc连接,我的连接字符串如下: driver={iSeries Access ODBC Driver}; system={0}; uid={1}; pwd={2}; DefaultLibraries=*USRLIBL; 我能够很好地连接到系统。 * USRLIBL包含来自用户的所有必需库(属于“仅API”类型,可以访问所有用户库)。 但是,当我尝试访问某些ERP库时,它表示无法找到它们,而其他的则可以。 所以作为一个非常基本的演练: 1. Open Connection – Query File 1 from Library A: OK! – Close Connection 2. Open Connection – Query File 2 from Library A: OK! – Close Connection 3. Open Connection – Query File 1 from Library B: […]

来自.NET的参数化DB2查询

我试图使用客户端访问ODBC驱动程序使用以下代码从.NET运行针对DB2数据库的参数化查询: var db2Cmd = new OdbcCommand(“INSERT INTO presnlats (LAT) VALUES (@LAT)”, db2Conn); db2Cmd.Parameters.AddWithValue(“@LAT”, insertValue); Console.Out.WriteLine(db2Cmd.ExecuteNonQuery()); 执行时,抛出OdbcException : 错误[42S22] [IBM] [iSeries Access ODBC驱动程序] [DB2 UDB] SQL0206 – 列@LAT不在指定的表中。 互联网似乎暗示客户端访问ODBC驱动程序支持参数化查询,但此错误似乎表示不同。 提供的代码有什么问题吗?

“未找到数据源名称且未指定默认驱动程序”错误

我收到错误,如ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified在发布网站时ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 。 如果我从VisualStudio运行网站,它工作正常,没问题。 我把connection string放在web.config文件中。 连接字符串类似于 请指导我解决此问题。

在不同的计算机上编码dBase III .dbf文件的问题

我正在使用C#和.NET 3.5,尝试使用带有Microsoft dBase驱动程序的ODBC从旧的dbf文件导入一些数据。 dbf采用dBase III格式,并使用ibm850编码进行字符串处理。 现在,当我在我的机器上运行我的程序时,从OdbcDataReader读取的所有字符串数据都会转换为UTF-16或UTF-8或其他东西,idk并且我将它保存为UTF-8并且一切正常,但是当我尝试在XP机器上使用此程序,某些字符无法正确转换为UTF-8。 ”’例如。 可能还有其他一些。 ‘Ä’,’Ö’和’Ü’等字符都可以。 这就是问题。 也许ODBC或驱动程序使用一些机器文化信息或其他东西来搞乱一切。 是否可以从数据库中读取字符串作为二进制文件? 也许像CONVERT或CAST这样的function? 或者我在哪里可以找到适用于此dBase驱动程序或其他驱动程序的SQL函数和语法的一些参考? 我四处搜索,找不到任何东西。 使用ODBC和SQL时我感到很盲目。 现在我正在使用临时黑客用Õ替换所有σ。 谢谢! 示例代码: System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection(); oConn.ConnectionString = @”Driver={Microsoft dBase Driver (*.dbf)};DriverID=277;Dbq=” + dbPath + “;”; oConn.Open(); System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand(); oCmd.CommandText = @”SELECT name FROM ” + dbPath + “TABLE.DBF”; System.Data.Odbc.OdbcDataReader reader = oCmd.ExecuteReader(); reader.Read(); byte[] […]

如何使用c#创建.dbf文件?

我正在尝试这个做一个选择,它的工作正常 string str = “SELECT * FROM FREE RIGHT JOIN TestTest ON FREE.DOCNO = TestTest.DOCNO”; DataTable dt = new DataTable(); OdbcDataAdapter da = new OdbcDataAdapter(str, odbconn); da.Fill(dt); 我正在尝试创建一个.dbf,我得到这个OdbcException: string str0 = “Create Table Persons (Name char(50), City char(50), Phone char(20), Zip decimal(5))”; OdbcCommand cmd = new OdbcCommand(str0, odbconn); cmd.ExecuteNonQuery(); 错误[42000] [Microsoft] [ODBC dBase驱动程序]字段定义中的语法错误。

在C#中列出ODBC数据源

我正在寻找一种适当抽象的方法来从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() 唯一的问题是我在至少一台西class牙语机器上发现他们的注册表键是西class牙语,所以显然违反这种抽象(如果存在)已经让我陷入困境。 是否有库函数来执行此操作?

ODBC参数占位符可以命名吗?

我做了一些搜索,但没有找到我的问题的确切答案。 有没有办法定义哪个? 在SQL查询中属于哪个参数? 例如,我需要执行以下操作: SELECT * FROM myTable WHERE myField = @Param1 OR myField2 = @Param1 OR myField1 = @Param2 OR myField2 = @Param2 ODBC的相同查询是: SELECT * FROM myTable WHERE myField = ? or myField2 = ? or myField1 = ? or myField2 = ? 有没有办法告诉ODBC命令哪个参数除了为每个值加载参数两次外? 我怀疑没有,但可以使用更有经验的ODBC程序员的观点。 编辑 :我正在使用的ODBC驱动程序是BBj ODBC驱动程序。