实例讲解:.NET如何访问MySQL数据库
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进行访问。
具体如何利用这个库进行操作,可以参考其中的例子。