访问MySQL数据库用.NET!

以下的文章主要介绍的是用.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:

以下是引用片段:

 

  1. #region LICENSE  
  2. /*  
  3. MySQL(和PHP搭配之***组合)DriverCS: An C# driver for MySQL(和PHP搭配之***组合).  
  4. Copyright (c) 2002 Manuel Lucas Vi馻s Livschitz.  
  5. This file is part of MySQL(和PHP搭配之***组合)DriverCS.  
  6. MySQL(和PHP搭配之***组合)DriverCS is free software; you can redistribute it and/or modify  
  7. it under the terms of the GNU General Public License as published by  
  8. the Free Software Foundation; either version 2 of the License, or  
  9. (at your option) any later version.  
  10. MySQL(和PHP搭配之***组合)DriverCS is distributed in the hope that it will be useful,  
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of  
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
  13. GNU General Public License for more details.  
  14. You should have received a copy of the GNU General Public License  
  15. along with MySQL(和PHP搭配之***组合)DriverCS; if not, write to the Free Software  
  16. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  
  17. */  
  18. #endregion  
  19. using System;  
  20. using System.Data;  
  21. using System.Runtime.InteropServices;  
  22. namespace MySQL(和PHP搭配之***组合)DriverCS  
  23. {  
  24. //[StructLayout(LayoutKind.Sequential)]  
  25. public class MySQL(和PHP搭配之***组合)_FIELD_FACTORY  
  26. {  
  27. static string version;  
  28. public static IMySQL(和PHP搭配之***组合)_FIELD GetInstance()  
  29. {  
  30. if (version==null)   
  31. {  
  32. version = CPrototypes.GetClientInfo();  
  33. }  
  34. if (version.CompareTo("4.1.2-alpha")>=0)   
  35. {  
  36. return new MySQL(和PHP搭配之***组合)_FIELD_VERSION_5();  
  37. }  
  38. else   
  39. return new MySQL(和PHP搭配之***组合)_FIELD_VERSION_3();  
  40. }  
  41. }  
  42. public interface IMySQL(和PHP搭配之***组合)_FIELD  
  43. {  
  44. string Name{get;}  
  45. uint Type{get;}  
  46. long Max_Length {get;}  
  47. }  
  48. ///<summary> 
  49. /// Field descriptor  
  50. ///</summary> 
  51. [StructLayout(LayoutKind.Sequential)]//"3.23.32", 4.0.1-alpha  
  52. internal class MySQL(和PHP搭配之***组合)_FIELD_VERSION_3: IMySQL(和PHP搭配之***组合)_FIELD   
  53. {  
  54. ///<summary> 
  55. /// Name of column  
  56. ///</summary> 
  57. public string name;   
  58. ///<summary> 
  59. /// Table of column if column was a field  
  60. ///</summary> 
  61. public string table;   
  62. //public string org_table; /* Org table name if table was an alias */  
  63. //public string db; /* Database for table */  
  64. ///<summary> 
  65. /// def  
  66. ///</summary> 
  67. public string def;   
  68. ///<summary> 
  69. /// length  
  70. ///</summary> 
  71. public long length;   
  72. ///<summary> 
  73. /// max_length  
  74. ///</summary> 
  75. public long max_length;   
  76. ///<summary> 
  77. /// Div flags  
  78. ///</summary> 
  79. public uint flags;   
  80. ///<summary> 
  81. /// Number of decimals in field   
  82. ///</summary> 
  83. public uint decimals;   
  84. ///<summary> 
  85. /// Type of field. Se MySQL(和PHP搭配之***组合)_com.h for types   
  86. ///</summary> 
  87. public uint type;   
  88. ///<summary> 
  89. /// Name  
  90. ///</summary> 
  91. public string Name  
  92. {  
  93. get{return name;}  
  94. }  
  95. ///<summary> 
  96. /// Type  
  97. ///</summary> 
  98. public uint Type  
  99. {  
  100. get{return type;}  
  101. }  
  102. ///<summary> 
  103. /// Max_Length  
  104. ///</summary> 
  105. public long Max_Length  
  106. {  
  107. get {return max_length;}  
  108. }  
  109. }   
  110. ///<summary> 
  111. /// Field descriptor  
  112. ///</summary> 
  113. [StructLayout(LayoutKind.Sequential)]  
  114. internal class MySQL(和PHP搭配之***组合)_FIELD_VERSION_5: IMySQL(和PHP搭配之***组合)_FIELD   
  115. {  
  116. ///<summary> 
  117. /// Name of column   
  118. ///</summary> 
  119. public string name;   
  120. ///<summary> 
  121. /// Original column name, if an alias  
  122. ///</summary> 
  123. public string org_name;   
  124. ///<summary> 
  125. /// Table of column if column was a field  
  126. ///</summary> 
  127. public string table;   
  128. ///<summary> 
  129. /// Org table name if table was an alias  
  130. ///</summary> 
  131. public string org_table;   
  132. ///<summary> 
  133. /// Database for table  
  134. ///</summary> 
  135. public string db;   
  136. ///<summary> 
  137. /// Catalog for table  
  138. ///</summary> 
  139. //public string catalog;   
  140. ///<summary> 
  141. /// def  
  142. ///</summary> 
  143. public string def;   
  144. ///<summary> 
  145. /// length  
  146. ///</summary> 
  147. public long length;   
  148. ///<summary> 
  149. /// max_length  
  150. ///</summary> 
  151. public long max_length;   
  152. ///<summary> 
  153. /// name_length  
  154. ///</summary> 
  155. //public uint name_length;  
  156. ///<summary> 
  157. /// org_name_length  
  158. ///</summary> 
  159. public uint org_name_length;  
  160. ///<summary> 
  161. /// table_length  
  162. ///</summary> 
  163. public uint table_length;  
  164. ///<summary> 
  165. /// org_table_length  
  166. ///</summary> 
  167. public uint org_table_length;  
  168. ///<summary> 
  169. /// db_length  
  170. ///</summary> 
  171. public uint db_length;  
  172. ///<summary> 
  173. /// catalog_length  
  174. ///</summary> 
  175. public uint catalog_length;  
  176. ///<summary> 
  177. /// def_length  
  178. ///</summary> 
  179. public uint def_length;  
  180. ///<summary> 
  181. /// Div flags  
  182. ///</summary> 
  183. public uint flags;   
  184. ///<summary> 
  185. /// Number of decimals in field  
  186. ///</summary> 
  187. public uint decimals;   
  188. ///<summary> 
  189. /// Character set  
  190. ///</summary> 
  191. public uint charsetnr;   
  192. ///<summary> 
  193. /// Type of field. Se MySQL(和PHP搭配之***组合)_com.h for types  
  194. ///</summary> 
  195. public uint type;   
  196. ///<summary> 
  197. /// Name  
  198. ///</summary> 
  199. public string Name  
  200. {  
  201. get {return name;}  
  202. }  
  203. ///<summary> 
  204. /// Type  
  205. ///</summary> 
  206. public uint Type  
  207. {  
  208. get {return type;}  
  209. }  
  210. ///<summary> 
  211. /// Max_Length  
  212. ///</summary> 
  213. public long Max_Length  
  214. {  
  215. get {return max_length;}  
  216. }  
  217. }   
  218. //[StructLayout(LayoutKind.Explicit)]  
  219. public enum enum_field_types   
  220. {  
  221. FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY,  
  222. FIELD_TYPE_SHORT, FIELD_TYPE_LONG,  
  223. FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE,  
  224. FIELD_TYPE_NULL, FIELD_TYPE_TIMESTAMP,  
  225. FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24,  
  226. FIELD_TYPE_DATE, FIELD_TYPE_TIME,  
  227. FIELD_TYPE_DATETIME, FIELD_TYPE_YEAR,  
  228. FIELD_TYPE_NEWDATE,  
  229. FIELD_TYPE_ENUM=247,  
  230. FIELD_TYPE_SET=248,  
  231. FIELD_TYPE_TINY_BLOB=249,  
  232. FIELD_TYPE_MEDIUM_BLOB=250,  
  233. FIELD_TYPE_LONG_BLOB=251,  
  234. FIELD_TYPE_BLOB=252,  
  235. FIELD_TYPE_VAR_STRING=253,  
  236. FIELD_TYPE_STRING=254,  
  237. FIELD_TYPE_GEOMETRY=255 
  238. };  
  239. ///<summary> 
  240. /// C prototypes warpper for MySQL(和PHP搭配之***组合)lib.  
  241. ///</summary> 
  242. internal class CPrototypes  
  243. {  
  244. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_init" )]  
  245. unsafe public static extern void* MySQL(和PHP搭配之***组合)_init(void* must_be_null);  
  246. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_close" )]  
  247. unsafe public static extern void MySQL(和PHP搭配之***组合)_close(void* handle);  
  248. // BEGIN ADDITION 2004-07-01 BY Alex Seewald  
  249. // Enables us to call MySQL(和PHP搭配之***组合)_option to activate compression and timeout  
  250. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_options" )]   
  251. unsafe public static extern void MySQL(和PHP搭配之***组合)_options(void* MySQL(和PHP搭配之***组合), uint option, uint *value);  
  252. // END ADDITION 2004-07-01 By Alex Seewald  
  253. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_real_connect" )]  
  254. 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);  
  255. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_query" )]  
  256. unsafe public static extern int MySQL(和PHP搭配之***组合)_query(void*MySQL(和PHP搭配之***组合), string query);  
  257. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_store_result" )]  
  258. unsafe public static extern void *MySQL(和PHP搭配之***组合)_store_result(void *MySQL(和PHP搭配之***组合));  
  259. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_free_result" )]  
  260. unsafe public static extern void MySQL(和PHP搭配之***组合)_free_result(void*result);  
  261. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_errno" )]  
  262. unsafe public static extern uint MySQL(和PHP搭配之***组合)_errno(void*MySQL(和PHP搭配之***组合));  
  263. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_error" )]  
  264. unsafe public static extern string MySQL(和PHP搭配之***组合)_error(void*MySQL(和PHP搭配之***组合));  
  265. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_field_count" )]  
  266. unsafe public static extern uint MySQL(和PHP搭配之***组合)_field_count(void*MySQL(和PHP搭配之***组合));  
  267. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_affected_rows" )]  
  268. unsafe public static extern ulong MySQL(和PHP搭配之***组合)_affected_rows(void*MySQL(和PHP搭配之***组合));  
  269. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_num_fields" )]  
  270. unsafe public static extern uint MySQL(和PHP搭配之***组合)_num_fields(void*result);  
  271. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_num_rows" )]  
  272. unsafe public static extern ulong MySQL(和PHP搭配之***组合)_num_rows(void *result);  
  273. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_fetch_field_direct" )]  
  274. unsafe public static extern IntPtr MySQL(和PHP搭配之***组合)_fetch_field_direct(void*result, uint fieldnr);  
  275. ///<returns>Returns a string that represents the client library version</returns> 
  276. [DllImport("libMySQL(和PHP搭配之***组合).dll",CharSet=System.Runtime.InteropServices.CharSet.Ansi,  
  277. EntryPoint="MySQL(和PHP搭配之***组合)_get_client_info"ExactSpelling=true)]  
  278. public static extern string GetClientInfo();  
  279. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_fetch_row" )]  
  280. unsafe public static extern IntPtr MySQL(和PHP搭配之***组合)_fetch_row(void*result);  
  281. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_select_db" )]  
  282. unsafe public static extern int MySQL(和PHP搭配之***组合)_select_db(void*MySQL(和PHP搭配之***组合),string dbname);  
  283. [ DllImport( "libMySQL(和PHP搭配之***组合).dll", EntryPoint="MySQL(和PHP搭配之***组合)_fetch_lengths" )]  
  284. unsafe public static extern UInt32 *MySQL(和PHP搭配之***组合)_fetch_lengths(void*result);  
  285. }  
  286. }   

 

基本上是将C风格的基础数据结构进行.net的重新定义,然后通过InteropServices进行访问。具体如何利用这个库进行操作,可以参考其中的例子。以上的相关内容就是对.NET如何访问MySQL数据库的介绍,望你能有所收获。

【编辑推荐】

  1. 修改MySQL root密码5步骤介绍
  2. 提高MySQL连接数,很简单
  3. 获得MySQL运行报告,并不难
  4. 正确解决MySQL中文乱码的实操
  5. MySQL-Server连接在MySQL-Client下

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/284626.html<

(0)
运维的头像运维
上一篇2025-05-14 12:07
下一篇 2025-05-14 12:08

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注