您的位置:首页 > 数据库 > MySQL

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

2008-05-01 02:12 603 查看
.Gtw994{display:none;} .NET数据库天然支持MSSQLServer,但是并非其他数据库不支持,而是微软基于自身利益需要,在支持、营销上推自己的数据库产品;但是作为平台战略,他并非排斥其他数据库,而是参考java体系提出了一套数据库访问规范,让各个第三方进行开发,提供特定的驱动。
MySQL是免费的数据库,在成本上具有无可替代的优势,但是目前来讲,并没有提供。微软把MySQL当作ODBC数据库,可以按照ODBC.NET规范进行访问,具体参考

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

通过阅读源代码,我们看到MySQLDriverCS的思路是利用C函数的底层库来操纵数据库的,通常提供对MySQL数据库访问数据库的CDLL是名为libMySQL.dll的驱动文件,MySQLDriverCS作为一个.NET库进行封装C风格的驱动。
具体如何进行呢?
打开工程后,我们看到其中有一个比较特殊的.cs文件CPrototypes.cs:
以下是引用片段:
#regionLICENSE
/*
MySQLDriverCS:AnC#driverforMySQL.
Copyright(c)2002ManuelLucasVi馻sLivschitz.

ThisfileispartofMySQLDriverCS.

MySQLDriverCSisfreesoftware;youcanredistributeitand/ormodify
itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby
theFreeSoftwareFoundation;eitherversion2oftheLicense,or
(atyouroption)anylaterversion.

MySQLDriverCSisdistributedinthehopethatitwillbeuseful,
butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe
GNUGeneralPublicLicenseformoredetails.

YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense
alongwithMySQLDriverCS;ifnot,writetotheFreeSoftware
Foundation,Inc.,59TemplePlace,Suite330,Boston,MA02111-1307USA
*/
#endregion
usingSystem;
usingSystem.Data;
usingSystem.Runtime.InteropServices;
namespaceMySQLDriverCS
{
//[StructLayout(LayoutKind.Sequential)]
publicclassMySQL_FIELD_FACTORY
{
staticstringversion;
publicstaticIMySQL_FIELDGetInstance()
{

if(version==null)
{
version=CPrototypes.GetClientInfo();
}
if(version.CompareTo("4.1.2-alpha")>=0)
{
returnnewMySQL_FIELD_VERSION_5();
}
else
returnnewMySQL_FIELD_VERSION_3();
}
}
publicinterfaceIMySQL_FIELD
{
stringName{get;}
uintType{get;}
longMax_Length {get;}
}
///<summary>
///Fielddescriptor
///</summary>
[StructLayout(LayoutKind.Sequential)]//"3.23.32",4.0.1-alpha
internalclassMySQL_FIELD_VERSION_3:IMySQL_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_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_FIELD_VERSION_5:IMySQL_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_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,
共2页: 上一页 1 [2] 下一页
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: