C#使用ODBC链接MySQL数据库

C#使用ODBC链接MySQL数据库

C#使用ODBC链接MySQL数据库

1、ODBC.NET(全称ODBC .NET Data Provider)是一个免费的.NET Framework附加组件,需要到微软公司的网站上去下载,下载地址为:http://download.microsoft.com/download/dasdk/Install/1.0.4030.0/W98NT42KMeXP/EN-US/odbc_net.msi,它需要系统已经安装MDAC 2.7或者更高版本。

2、还需要安装MySQL的ODBC驱动程序,下载地址为:http://www.mysql.com/downloads/connector/odbc/

3、还需要在"ODBC数据源管理器"中配置一下DSN,步骤如下图所示:

(1)打开ODBC配置界面

(2)点击“添加”按钮,然后选择MySQL驱动

(3)打击完成后,要求配置数据库连接属性

Data Source Name:为该数据源取个名字(程序中要用)

Description:描述,非必填项

TCP/IP Server:数据库的IP地址,Port:端口

User:登录数据库的用户名

Password:密码

Database:需要操作的数据库名称

---------------------------------------------------------------------------------

填写完后,点击右下角的“test”按钮,测试是否可以链接上数据库,如下图:

表示链接成功。

(4)配置完成后,可以在ODBC数据源中看到刚才配置的MySQL数据源

(5)到此,ODBC数据源配置完成。

操作C#数据库代码:

Program.cs

[csharp]  view plain  copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data.Odbc;  
  6.   
  7. namespace AccessDB  
  8. {  
  9.     class Program  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.             string constr = "DSN=MySQL;" + "UID=root;" + "PWD=671354;";  
  14.             OdbcConnection conn = new OdbcConnection(constr);  
  15.             conn.Open();  
  16.             //string insert = "insert into test.test values(null, 'wwh', '123')";  
  17.             //string select = "select * from test.test";  
  18.             //string update = "update test.test set name='whwang' where id = 11";  
  19.             string delete = "delete from test.test where id = 12";  
  20.             DB db = new DB();  
  21.             //db.Insert(conn, insert);  
  22.             //db.Select(conn, select);  
  23.             //db.Update(conn, update);  
  24.             db.Delete(conn, delete);  
  25.             conn.Close();  
  26.   
  27.             Console.Read();  
  28.         }  
  29.     }  
  30. }  
DB.cs

[csharp]  view plain  copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Text;  
  5. using System.Data.Odbc;  
  6.   
  7. namespace AccessDB  
  8. {  
  9.     class DB  
  10.     {  
  11.         public void Select(OdbcConnection conn, string selectSql)  
  12.         {  
  13.             OdbcCommand cmd = new OdbcCommand(selectSql, conn);  
  14.             OdbcDataReader reader = cmd.ExecuteReader();  
  15.             while (reader.Read())  
  16.             {  
  17.                 Console.Write(reader.GetString(0) + ", ");  
  18.                 Console.Write(reader.GetString(1) + ", ");  
  19.                 Console.WriteLine(reader.GetString(2));  
  20.             }  
  21.         }  
  22.   
  23.         public void Insert(OdbcConnection conn, string insertSql)   
  24.         {  
  25.             OdbcCommand cmd = new OdbcCommand(insertSql, conn);  
  26.             cmd.ExecuteNonQuery();  
  27.             cmd.Dispose();  
  28.         }  
  29.   
  30.         public void Update(OdbcConnection conn, string updateSql)  
  31.         {  
  32.             OdbcCommand cmd = new OdbcCommand(updateSql, conn);  
  33.             cmd.ExecuteNonQuery();  
  34.             cmd.Dispose();  
  35.         }  
  36.   
  37.         public void Delete(OdbcConnection conn, string deleteSql)  
  38.         {  
  39.             OdbcCommand cmd = new OdbcCommand(deleteSql, conn);  
  40.             cmd.ExecuteNonQuery();  
  41.             cmd.Dispose();  
  42.         }  
  43.     }  

I'm using the Impala ODBC driver provided by Cloudera. I can't seem to use query parameters correctly. For instance:

OdbcCommand command = DbConnection.CreateCommand();
command.CommandText = "INSERT INTO TABLE test VALUES(?, ?)";
command.Parameters.Add("key", OdbcType.VarChar).Value = "csharp";
command.Parameters.Add("val", OdbcType.VarChar).Value = "test";
command.ExecuteNonQuery();

throws the following exception.

{"ERROR [HY000] [Cloudera][ImpalaODBC] (110) Error while executing a query in Impala: [HY000] : AnalysisException: Syntax error in line 1:\nINSERT INTO TABLE test VALUES(?, ?)\n
^\nEncountered: Unexpected character\nExpected: CASE, CAST, EXISTS, FALSE, IF, INTERVAL, NOT, NULL, TRUNCATE, TRUE, IDENTIFIER\n\nCAUSED BY: Exception: Syntax error\n"}

Which should manage query parameters (and replacement of ? by values), ODBC library or the driver ? It seems to be the driver and in this case, it's not implemented... And it's a shame because I cannot use prepared statement.

Does somebody know a way to use query parameters with the Impala ODBC driver?




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值