实例讲解:.NET如何访问MySQL数据库

网络整理 - 08-08
.NET的数据库天然支持MSSQLServer,但是并非其他数据库不支持,而是微软基于自身利益需要,在支持、营销上推自己的数据库产品;但是作为平台战略,他并非排斥其他数据库,而是参考java体系提出了一套数据库访问规范,让各个第三方进行开发,提供特定的驱动。

  MySQL是免费的数据库,在成本上具有无可替代的优势,但是目前来讲,并没有提供。微软把MySQL当作ODBC数据库,可以按照ODBC.Net规范进行访问,具体参考

  

  而实际上,针对ODBC。Net的需要配置DSN的麻烦,而是出现了一个开源的系统MySQLDriverCS,对MySQL的开发进行了封装,实现了.net环境下对于MySQL数据库系统的访问。

  

  通过阅读源代码,我们看到MySQLDriverCS的思路是利用C函数的底层库来操纵数据库的,通常提供对MySQL数据库的访问的数据库的C DLL是名为libmySQL.dll的驱动文件,MySQLDriverCS作为一个.net库进行封装C风格的驱动。

  具体如何进行呢?

  打开工程后,我们看到其中有一个比较特殊的.cs文件CPrototypes.cs:

以下是引用片段:

MYSQL_FIELD_FACTORY

IMYSQL_FIELD GetInstance()

         {

              if (version==null)

              {

                   version = CPrototypes.GetClientInfo();

              }

              if (version.CompareTo("4.1.2-alpha")>=0)

              {

                   return new MYSQL_FIELD_VERSION_5();

              }

              else

IMYSQL_FIELD

MYSQL_FIELD_VERSION_3: IMYSQL_FIELD

name;         

table;         

def;           

length;     

max_length;    

flags;        

decimals;     

type;

Name

Type

Max_Length

MYSQL_FIELD_VERSION_5: IMYSQL_FIELD

name;     

org_name;    

table;     

org_table;    

db;            

org_name_length;

table_length;

org_table_length;

db_length;

catalog_length;

def_length;

flags;        

decimals;     

charsetnr;    

type;

Name

Type

Max_Length

* mysql_init(mysql_close(mysql_options(* mysql_real_connect(mysql_query(*mysql_store_result(mysql_free_result(mysql_errno(mysql_error(mysql_field_count(mysql_affected_rows(mysql_num_fields(mysql_num_rows(IntPtr mysql_fetch_field_direct(

GetClientInfo();

IntPtr mysql_fetch_row(mysql_select_db(UInt32 *mysql_fetch_lengths(void*result);

     }

}

  基本上是将C风格的基础数据结构进行.net的重新定义,然后通过InteropServices进行访问。

  具体如何利用这个库进行操作,可以参考其中的例子。