访问MySQL数据库用.NET!

 2022-10-27    344  

以下的文章主要介绍的是用.NET访问MySQL数据库的实际操作步骤,我们大家都知道.NET的数据库本身就支持mssql(WINDOWS平台上强大的数据库平台)Server,但是并不是其他数据库不支持,而是微软基于自身利益需要。

在支持、营销上推自己的MySQL数据库产品;但是作为平台战略,他并非排斥其他数据库,而是参考java体系提出了一套数据库访问规范,让各个第三方进行开发,提供特定的驱动。

访问MySQL数据库用.NET!

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:

以下是引用片段:

#regionLICENSE 
/* 
MySQL(和PHP搭配之***组合)DriverCS:AnC#driverforMySQL(和PHP搭配之***组合). 
Copyright(c)2002ManuelLucasVi馻sLivschitz. 
ThisfileispartofMySQL(和PHP搭配之***组合)DriverCS. 
MySQL(和PHP搭配之***组合)DriverCSisfreesoftware;youcanredistributeitand/ormodify 
itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby 
theFreeSoftwareFoundation;eitherversion2oftheLicense,or 
(atyouroption)anylaterversion. 
MySQL(和PHP搭配之***组合)DriverCSisdistributedinthehopethatitwillbeuseful, 
butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof 
MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe 
GNUGeneralPublicLicenseformoredetails. 
YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense 
alongwithMySQL(和PHP搭配之***组合)DriverCS;ifnot,writetotheFreeSoftware 
Foundation,Inc.,59TemplePlace,Suite330,Boston,MA02111-1307USA 
*/ 
#endregion 
usingSystem; 
usingSystem.Data; 
usingSystem.Runtime.InteropServices; 
namespaceMySQL(和PHP搭配之***组合)DriverCS 
{ 
//[StructLayout(LayoutKind.Sequential)] 
publicclassMySQL(和PHP搭配之***组合)_FIELD_FACTORY 
{ 
staticstringversion; 
publicstaticIMySQL(和PHP搭配之***组合)_FIELDGetInstance() 
{ 
if(version==null) 
{ 
version=CPrototypes.GetClientInfo(); 
} 
if(version.CompareTo("4.1.2-alpha")>=0) 
{ 
returnnewMySQL(和PHP搭配之***组合)_FIELD_VERSION_5(); 
} 
else 
returnnewMySQL(和PHP搭配之***组合)_FIELD_VERSION_3(); 
} 
} 
publicinterfaceIMySQL(和PHP搭配之***组合)_FIELD 
{ 
stringName{get;} 
uintType{get;} 
longMax_Length{get;} 
} 
///<summary>
///Fielddescriptor 
///</summary>
[StructLayout(LayoutKind.Sequential)]//"3.23.32",4.0.1-alpha 
internalclassMySQL(和PHP搭配之***组合)_FIELD_VERSION_3:IMySQL(和PHP搭配之***组合)_FIELD 
{ 
///<summary>
///Nameofcolumn 
///</summary>
publicstringname; 
///<summary>
///Tableofcolumnifcolumnwasafield 
///</summary>
publicstringtable; 
//publicstringorg_table;/*Orgtablenameiftablewasanalias*/ 
//publicstringdb;/*Databasefortable*/ 
///<summary>
///def 
///</summary>
publicstringdef; 
///<summary>
///length 
///</summary>
publiclonglength; 
///<summary>
///max_length 
///</summary>
publiclongmax_length; 
///<summary>
///Divflags 
///</summary>
publicuintflags; 
///<summary>
///Numberofdecimalsinfield 
///</summary>
publicuintdecimals; 
///<summary>
///Typeoffield.SeMySQL(和PHP搭配之***组合)_com.hfortypes 
///</summary>
publicuinttype; 
///<summary>
///Name 
///</summary>
publicstringName 
{ 
get{returnname;} 
} 
///<summary>
///Type 
///</summary>
publicuintType 
{ 
get{returntype;} 
} 
///<summary>
///Max_Length 
///</summary>
publiclongMax_Length 
{ 
get{returnmax_length;} 
} 
} 
///<summary>
///Fielddescriptor 
///</summary>
[StructLayout(LayoutKind.Sequential)] 
internalclassMySQL(和PHP搭配之***组合)_FIELD_VERSION_5:IMySQL(和PHP搭配之***组合)_FIELD 
{ 
///<summary>
///Nameofcolumn 
///</summary>
publicstringname; 
///<summary>
///Originalcolumnname,ifanalias 
///</summary>
publicstringorg_name; 
///<summary>
///Tableofcolumnifcolumnwasafield 
///</summary>
publicstringtable; 
///<summary>
///Orgtablenameiftablewasanalias 
///</summary>
publicstringorg_table; 
///<summary>
///Databasefortable 
///</summary>
publicstringdb; 
///<summary>
///Catalogfortable 
///</summary>
//publicstringcatalog; 
///<summary>
///def 
///</summary>
publicstringdef; 
///<summary>
///length 
///</summary>
publiclonglength; 
///<summary>
///max_length 
///</summary>
publiclongmax_length; 
///<summary>
///name_length 
///</summary>
//publicuintname_length; 
///<summary>
///org_name_length 
///</summary>
publicuintorg_name_length; 
///<summary>
///table_length 
///</summary>
publicuinttable_length; 
///<summary>
///org_table_length 
///</summary>
publicuintorg_table_length; 
///<summary>
///db_length 
///</summary>
publicuintdb_length; 
///<summary>
///catalog_length 
///</summary>
publicuintcatalog_length; 
///<summary>
///def_length 
///</summary>
publicuintdef_length; 
///<summary>
///Divflags 
///</summary>
publicuintflags; 
///<summary>
///Numberofdecimalsinfield 
///</summary>
publicuintdecimals; 
///<summary>
///Characterset 
///</summary>
publicuintcharsetnr; 
///<summary>
///Typeoffield.SeMySQL(和PHP搭配之***组合)_com.hfortypes 
///</summary>
publicuinttype; 
///<summary>
///Name 
///</summary>
publicstringName 
{ 
get{returnname;} 
} 
///<summary>
///Type 
///</summary>
publicuintType 
{ 
get{returntype;} 
} 
///<summary>
///Max_Length 
///</summary>
publiclongMax_Length 
{ 
get{returnmax_length;} 
} 
} 
//[StructLayout(LayoutKind.Explicit)] 
publicenumenum_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>
///CprototypeswarpperforMySQL(和PHP搭配之***组合)lib. 
///</summary>
internalclassCPrototypes 
{ 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_init")] 
unsafepublicstaticexternvoid*MySQL(和PHP搭配之***组合)_init(void*must_be_null); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_close")] 
unsafepublicstaticexternvoidMySQL(和PHP搭配之***组合)_close(void*handle); 
//BEGINADDITION2004-07-01BYAlexSeewald 
//EnablesustocallMySQL(和PHP搭配之***组合)_optiontoactivatecompressionandtimeout 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_options")] 
unsafepublicstaticexternvoidMySQL(和PHP搭配之***组合)_options(void*MySQL(和PHP搭配之***组合),uintoption,uint*value); 
//ENDADDITION2004-07-01ByAlexSeewald 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_real_connect")] 
unsafepublicstaticexternvoid*MySQL(和PHP搭配之***组合)_real_connect(void*MySQL(和PHP搭配之***组合),
stringhost,stringuser,stringpasswd,stringdb,uintport,stringunix_socket,intclient_flag); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_query")] 
unsafepublicstaticexternintMySQL(和PHP搭配之***组合)_query(void*MySQL(和PHP搭配之***组合),stringquery); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_store_result")] 
unsafepublicstaticexternvoid*MySQL(和PHP搭配之***组合)_store_result(void*MySQL(和PHP搭配之***组合)); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_free_result")] 
unsafepublicstaticexternvoidMySQL(和PHP搭配之***组合)_free_result(void*result); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_errno")] 
unsafepublicstaticexternuintMySQL(和PHP搭配之***组合)_errno(void*MySQL(和PHP搭配之***组合)); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_error")] 
unsafepublicstaticexternstringMySQL(和PHP搭配之***组合)_error(void*MySQL(和PHP搭配之***组合)); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_field_count")] 
unsafepublicstaticexternuintMySQL(和PHP搭配之***组合)_field_count(void*MySQL(和PHP搭配之***组合)); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_affected_rows")] 
unsafepublicstaticexternulongMySQL(和PHP搭配之***组合)_affected_rows(void*MySQL(和PHP搭配之***组合)); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_num_fields")] 
unsafepublicstaticexternuintMySQL(和PHP搭配之***组合)_num_fields(void*result); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_num_rows")] 
unsafepublicstaticexternulongMySQL(和PHP搭配之***组合)_num_rows(void*result); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_fetch_field_direct")] 
unsafepublicstaticexternIntPtrMySQL(和PHP搭配之***组合)_fetch_field_direct(void*result,uintfieldnr); 
///<returns>Returnsastringthatrepresentstheclientlibraryversion</returns>
[DllImport("libMySQL(和PHP搭配之***组合).dll",CharSet=System.Runtime.InteropServices.CharSet.Ansi, 
EntryPoint="MySQL(和PHP搭配之***组合)_get_client_info",ExactSpelling=true)] 
publicstaticexternstringGetClientInfo(); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_fetch_row")] 
unsafepublicstaticexternIntPtrMySQL(和PHP搭配之***组合)_fetch_row(void*result); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_select_db")] 
unsafepublicstaticexternintMySQL(和PHP搭配之***组合)_select_db(void*MySQL(和PHP搭配之***组合),stringdbname); 
[DllImport("libMySQL(和PHP搭配之***组合).dll",EntryPoint="MySQL(和PHP搭配之***组合)_fetch_lengths")] 
unsafepublicstaticexternUInt32*MySQL(和PHP搭配之***组合)_fetch_lengths(void*result); 
} 
} 

基本上是将C风格的基础数据结构进行.net的重新定义,然后通过InteropServices进行访问。具体如何利用这个库进行操作,可以参考其中的例子。

  •  标签:  
  • MySQL
  •  

原文链接:https://77isp.com/post/9822.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。