实例讲解:.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] 下一页
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] 下一页
相关文章推荐
- 实例讲解:.NET如何访问MySQL数据库
- [sql server] 非常简单的实例说明 如何用.net访问sql server(asp.net 和 c# )
- js如何实现访问数据库实例代码、讲解,及其优缺点
- 讲解MySQL数据库与ASP.NET如何强强联手
- 利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
- ASP.NET操作MySql数据库的实例代码讲解
- 技巧实例:如何在.NET中访问MySQL数据库
- Yii2使用驼峰命名的形式访问控制器(实例讲解)
- SQL Server如何跨实例访问数据库
- 实例讲解如何在iOS应用开发中使用设计模式中的代理模式
- 如何在.NET中访问MySQL数据库
- CE MAPI实例讲解 --- 如何设置收件人信息(五)
- 实例讲解如何才能让你的SQL运行得更快
- 如何在.NET中访问MySQL数据库 (转自:http://blog.csdn.net/vstart/archive/2006/06.aspx)
- 如何解决spring bean通过this访问实例方法时@Transactional失效
- 实例讲解MYSQL数据库的查询优化技术
- MySQL数据库与ASP.NET如何强强联手
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题(非原创,摘自书中)
- MySQL/Postgrsql 详细讲解如何用ODBC接口访问MySQL指南
- 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解