您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

访问MySQL数据库用.NET!

2024/3/10 0:20:03发布18次查看
以下的文章主要介绍的是用.net访问mysql数据库的实际操作步骤,我们大家都知道.net的数据库本身就支持mssql(windows平台上强大的数据库平台)server,但是并不是其他数据库不支持,而是微软基于自身利益需要。 在支持、营销上推自己的mysql数据库产品;但是作
以下的文章主要介绍的是用.net访问mysql数据库的实际操作步骤,我们大家都知道 .net的数据库本身就支持mssql(windows平台上强大的数据库平台)server,但是并不是其他数据库不支持,而是微软基于自身利益需要。
在支持、营销上推自己的mysql数据库产品;但是作为平台战略,他并非排斥其他数据库,而是参考java体系提出了一套数据库访问规范,让各个第三方进行开发,提供特定的驱动。
mysql(和php搭配之最佳组合)是免费的数据库,在成本上具有无可替代的优势,但是目前来讲,并没有提供。微软把mysql(和php搭配之最佳组合)当作odbc数据库,可以按照odbc.net规范进行访问,具体参考
而实际上,针对odbc。net的需要配置dsn的麻烦,而是出现了一个开源的系统mysql(和php搭配之最佳组合)drivercs,对mysql(和php搭配之最佳组合)的开发进行了封装,实现了.net环境下对于mysql数据库系统的访问。
通过阅读源代码,我们看到mysql(和php搭配之最佳组合)drivercs的思路是利用c函数的底层库来操纵数据库的,通常提供对mysql(和php搭配之最佳组合)数据库的访问的mysql数据库的c dll是名为libmysql(和php搭配之最佳组合).dll的驱动文件,mysql(和php搭配之最佳组合)drivercs作为一个.net库进行封装c风格的驱动。
具体如何进行呢?
打开工程后,我们看到其中有一个比较特殊的.cs文件cprototypes.cs:
以下是引用片段:
#region license  /*  mysql(和php搭配之最佳组合)drivercs: an c# driver for mysql(和php搭配之最佳组合).  copyright (c) 2002 manuel lucas vi馻s livschitz.  this file is part of mysql(和php搭配之最佳组合)drivercs.  mysql(和php搭配之最佳组合)drivercs is free software; you can redistribute it and/or modify  it under the terms of the gnu general public license as published by  the free software foundation; either version 2 of the license, or  (at your option) any later version.  mysql(和php搭配之最佳组合)drivercs is distributed in the hope that it will be useful,  but without any warranty; without even the implied warranty of  merchantability or fitness for a particular purpose. see the  gnu general public license for more details.  you should have received a copy of the gnu general public license  along with mysql(和php搭配之最佳组合)drivercs; if not, write to the free software  foundation, inc., 59 temple place, suite 330, boston, ma 02111-1307 usa  */  #endregion  using system;  using system.data;  using system.runtime.interopservices;  namespace mysql(和php搭配之最佳组合)drivercs  {  //[structlayout(layoutkind.sequential)]  public class mysql(和php搭配之最佳组合)_field_factory  {  static string version;  public static imysql(和php搭配之最佳组合)_field getinstance()  {  if (version==null)   {  version = cprototypes.getclientinfo();  }  if (version.compareto(4.1.2-alpha)>=0)   {  return new mysql(和php搭配之最佳组合)_field_version_5();  }  else   return new mysql(和php搭配之最佳组合)_field_version_3();  }  }  public interface imysql(和php搭配之最佳组合)_field  {  string name{get;}  uint type{get;}  long max_length {get;}  }  ///summary> /// field descriptor  ///summary> [structlayout(layoutkind.sequential)]//3.23.32, 4.0.1-alpha  internal class mysql(和php搭配之最佳组合)_field_version_3: imysql(和php搭配之最佳组合)_field   {  ///summary> /// name of column  ///summary> public string name;   ///summary> /// table of column if column was a field  ///summary> public string table;   //public string org_table; /* org table name if table was an alias */  //public string db; /* database for table */  ///summary> /// def  ///summary> public string def;   ///summary> /// length  ///summary> public long length;   ///summary> /// max_length  ///summary> public long max_length;   ///summary> /// div flags  ///summary> public uint flags;   ///summary> /// number of decimals in field   ///summary> public uint decimals;   ///summary> /// type of field. se mysql(和php搭配之最佳组合)_com.h for types   ///summary> public uint type;   ///summary> /// name  ///summary> public string name  {  get{return name;}  }  ///summary> /// type  ///summary> public uint type  {  get{return type;}  }  ///summary> /// max_length  ///summary> public long max_length  {  get {return max_length;}  }  }   ///summary> /// field descriptor  ///summary> [structlayout(layoutkind.sequential)]  internal class mysql(和php搭配之最佳组合)_field_version_5: imysql(和php搭配之最佳组合)_field   {  ///summary> /// name of column   ///summary> public string name;   ///summary> /// original column name, if an alias  ///summary> public string org_name;   ///summary> /// table of column if column was a field  ///summary> public string table;   ///summary> /// org table name if table was an alias  ///summary> public string org_table;   ///summary> /// database for table  ///summary> public string db;   ///summary> /// catalog for table  ///summary> //public string catalog;   ///summary> /// def  ///summary> public string def;   ///summary> /// length  ///summary> public long length;   ///summary> /// max_length  ///summary> public long max_length;   ///summary> /// name_length  ///summary> //public uint name_length;  ///summary> /// org_name_length  ///summary> public uint org_name_length;  ///summary> /// table_length  ///summary> public uint table_length;  ///summary> /// org_table_length  ///summary> public uint org_table_length;  ///summary> /// db_length  ///summary> public uint db_length;  ///summary> /// catalog_length  ///summary> public uint catalog_length;  ///summary> /// def_length  ///summary> public uint def_length;  ///summary> /// div flags  ///summary> public uint flags;   ///summary> /// number of decimals in field  ///summary> public uint decimals;   ///summary> /// character set  ///summary> public uint charsetnr;   ///summary> /// type of field. se mysql(和php搭配之最佳组合)_com.h for types  ///summary> public uint type;   ///summary> /// name  ///summary> public string name  {  get {return name;}  }  ///summary> /// type  ///summary> public uint type  {  get {return type;}  }  ///summary> /// max_length  ///summary> public long max_length  {  get {return max_length;}  }  }   //[structlayout(layoutkind.explicit)]  public enum enum_field_types   {  field_type_decimal, field_type_tiny,  field_type_short, field_type_long,  field_type_float, field_type_double,  field_type_null, field_type_timestamp,  field_type_longlong,field_type_int24,  field_type_date, field_type_time,  field_type_datetime, field_type_year,  field_type_newdate,  field_type_enum=247,  field_type_set=248,  field_type_tiny_blob=249,  field_type_medium_blob=250,  field_type_long_blob=251,  field_type_blob=252,  field_type_var_string=253,  field_type_string=254,  field_type_geometry=255 };  ///summary> /// c prototypes warpper for mysql(和php搭配之最佳组合)lib.  ///summary> internal class cprototypes  {  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_init )]  unsafe public static extern void* mysql(和php搭配之最佳组合)_init(void* must_be_null);  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_close )]  unsafe public static extern void mysql(和php搭配之最佳组合)_close(void* handle);  // begin addition 2004-07-01 by alex seewald  // enables us to call mysql(和php搭配之最佳组合)_option to activate compression and timeout  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_options )]   unsafe public static extern void mysql(和php搭配之最佳组合)_options(void* mysql(和php搭配之最佳组合), uint option, uint *value);  // end addition 2004-07-01 by alex seewald  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_real_connect )]  unsafe public static extern void* mysql(和php搭配之最佳组合)_real_connect(void* mysql(和php搭配之最佳组合), 
string host, string user, string passwd, string db, uint port, string unix_socket, int client_flag);  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_query )]  unsafe public static extern int mysql(和php搭配之最佳组合)_query(void*mysql(和php搭配之最佳组合), string query);  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_store_result )]  unsafe public static extern void *mysql(和php搭配之最佳组合)_store_result(void *mysql(和php搭配之最佳组合));  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_free_result )]  unsafe public static extern void mysql(和php搭配之最佳组合)_free_result(void*result);  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_errno )]  unsafe public static extern uint mysql(和php搭配之最佳组合)_errno(void*mysql(和php搭配之最佳组合));  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_error )]  unsafe public static extern string mysql(和php搭配之最佳组合)_error(void*mysql(和php搭配之最佳组合));  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_field_count )]  unsafe public static extern uint mysql(和php搭配之最佳组合)_field_count(void*mysql(和php搭配之最佳组合));  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_affected_rows )]  unsafe public static extern ulong mysql(和php搭配之最佳组合)_affected_rows(void*mysql(和php搭配之最佳组合));  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_num_fields )]  unsafe public static extern uint mysql(和php搭配之最佳组合)_num_fields(void*result);  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_num_rows )]  unsafe public static extern ulong mysql(和php搭配之最佳组合)_num_rows(void *result);  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_fetch_field_direct )]  unsafe public static extern intptr mysql(和php搭配之最佳组合)_fetch_field_direct(void*result, uint fieldnr);  ///returns>returns a string that represents the client library versionreturns> [dllimport(libmysql(和php搭配之最佳组合).dll,charset=system.runtime.interopservices.charset.ansi,  entrypoint=mysql(和php搭配之最佳组合)_get_client_info, exactspelling=true)]  public static extern string getclientinfo();  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_fetch_row )]  unsafe public static extern intptr mysql(和php搭配之最佳组合)_fetch_row(void*result);  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_select_db )]  unsafe public static extern int mysql(和php搭配之最佳组合)_select_db(void*mysql(和php搭配之最佳组合),string dbname);  [ dllimport( libmysql(和php搭配之最佳组合).dll, entrypoint=mysql(和php搭配之最佳组合)_fetch_lengths )]  unsafe public static extern uint32 *mysql(和php搭配之最佳组合)_fetch_lengths(void*result);  }  }   
基本上是将c风格的基础数据结构进行.net的重新定义,然后通过interopservices进行访问。具体如何利用这个库进行操作,可以参考其中的例子。以上的相关内容就是对.net如何访问mysql数据库的介绍,望你能有所收获。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product