在.NET访问MySql数据库时的几点经验(转)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

在.NET中要访问MySql,我采用的是MySql官方提供的.NET connector,此驱动只需要下载即可使用: http://dev.mysql.com/downloads/connector/net/1.0.html

在使用中积累了几点经验:
1)使用Parameter参数形式提交Command时必须要把"@"号换成"?"号,这一点让我困惑了一天,只是不明白MySQL为何要搞特殊呢,象MS、ODP.NET for Oracle、OleDb等方式,都是用"@"号的。
例子如下:
string connstr=Setting.Instance().GetConnectionString("MySql");
MySqlConnection conn = new MySqlConnection(connstr);
conn.Open();
string query = "insert into myfirst(Id,Name) values(?Id,?Name)";
MySqlCommand cmd = new MySqlCommand(query, conn);
MySqlParameter para1= new MySqlParameter("?Id",DbType.Int32); // 这里要注意必须要用?号
MySqlParameter para2= new MySqlParameter("?Name",DbType.String); // 这里要注意必须要用?号
para1.Value=5;
para2.Value="ddd";
cmd.Parameters.Add(para1);
cmd.Parameters.Add(para2);
cmd.ExecuteNonQuery();


2)在MySQL中也有保留字,为了提供兼容,我必须要找到定界符,好不容易在MySql的论坛里找到了,使用的定界符是`,这个符号不是单引号,而是键盘上数字1前面的那个“点”,真是害死我啊。

3)MySQL中的TOP功能倒是非常简单,只需要语句后面使用“limit n”就行了,这比ORACLE的那Rownum方便多了。

使用MySql 的.NET Connector访问MySQL总体来说还算不错的,大部分是兼容.NET中的IConnection、ICommand的。

PS:有个不明白就是在.NET Connector中提供一个MySqlDateTime类,不知道这个类具体有什么用,怎么用,在国内没有找到相关的资料。MySqlDateTime跟System.Date还不兼容,在MySQL论坛上相关帖子N多。

如果采用String类型的Parameter传递给MySql的DateTime字段会报:Unable to Convert MySql Date/Time value to System.DateTime 的错误。

所有相关的MySQL的问题可以去:http://forum.mysql.com/ 论坛看看:)




MySql现在的最新版本是5.x.第一次接触它是在大二的时候,用php,那时好像还是4.x版本。

Mysql5增加很多新的功能,开始支持:存储过程、触发器、视图、信息架构视图等...

MySql在安装时一如既往的比较复杂,往往就是一个失败的提示,没有什么其它提示原因。


这是一篇文章,比较MySql和SqlServer的, http://htm.winsteps.net/database/331.htm

MySql中文网站 http://www.mysql.cn/上资料很少,大多是些安装帮助。
要查资料还是去MySql的网站 http://www.mysql.com/

MySql现在有提供的各种连接工具( http://dev.mysql.com/downloads/connector/),.net下可以用的有 Connector/ODBCConnector/Net

ODBC连接效率可能稍低,最好还是用Net直接的连接
这篇文章介绍了各种连接方法 http://www.mysql.com/news-and-events/press-release/release_2002_10.html

1:ODBC连接
现在的版本是3.51,安装之后,可以这样操作:
// string conStr = "DRIVER = {MySQL ODBC 3.51 Driver}; SERVER = localhost; DATABASE =test; UID = root; PASSWORD=;";

// string conStr = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;USER=root;PASSWORD=;OPTION=3;";
string conStr = "provider = MySQL ODBC 3.51 Driver; SERVER = localhost; DATABASE =test; UID = root; PASSWORD=;";

try
{
OleDbConnection connection = new OleDbConnection(conStr);
connection.Open();
}

catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

2:Net连接:
MySQL Connector Net 1.0.7:有net1.0;net.1;net2.0;mono1.0四个版本的connector。免费
CoreLab.MySql 3.5:这是个商业的版本,试用期30天。

下边的代码是使用MySQL Connector Net 的例子。注意:他的Parameter的前缀是“?”而不是“@”。这个问题比较特殊。CoreLab里面的Parameter的前缀就是“@”.
string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false;port=3308", "localhost", "root", "", "test");
try
{
MySqlConnection myConn = new MySqlConnection(connStr);
myConn.Open();
MySqlCommand cmd = myConn.CreateCommand();

cmd.Parameters.Add("?DocName", MySqlDbType.VarChar, 50);
cmd.Parameters[0].Value = "test by code";
cmd.Parameters[0].SourceColumn = "DocName";
cmd.CommandText = "update t_docs set DocName=?DocName where DocId=4";
cmd.ExecuteNonQuery();

这是使用一个ORM时设置provider的例子
CustomProvider mysqlProvider = new CustomProvider("MySql.Data", "MySql.Data.MySqlClient.MySqlConnection", "MySql.Data.MySqlClient.MySqlDataAdapter");
mysqlProvider.StartDelimiter = ""; // default is "/""
mysqlProvider.EndDelimiter = ""; // default is "/""
mysqlProvider.ParameterPrefix = "?";//设置参数前缀
mysqlProvider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}"; // 设置分页算法
mysqlProvider.IdentityQuery = "SELECT LAST_INSERT_ID()"; // 设置获取刚刚插入记录Id的函数


3:OLE连接:
现在还没有来自官方的支持。

在vs2005中,直接引用for .net2.0版本的dll即可。至于那个商业版,就得费些功夫了,需要一个许可文件(拖动一个Conection组件到Form上就能自动创建该许可)

附,连接字符串可以到这里查询 http://www.connectionstrings.com/, 够全的了。



本文转自钢钢博客园博客,原文链接http://www.cnblogs.com/xugang/archive/2007/09/05/883282.html,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
安全 关系型数据库 数据管理
DMS产品常见问题之香港地区RDS开启安全访问代理失败如何解决
DMS(数据管理服务,Data Management Service)是阿里云提供的一种数据库管理和维护工具,它支持数据的查询、编辑、分析及安全管控;本汇总集中了DMS产品在实际使用中用户常遇到的问题及其相应的解答,目的是为使用者提供快速参考,帮助他们有效地解决在数据管理过程中所面临的挑战。
|
28天前
|
SQL 数据库连接 数据库
你不知道ADo.Net中操作数据库的步骤【超详细整理】
你不知道ADo.Net中操作数据库的步骤【超详细整理】
16 0
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
61 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
2月前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
35 4
|
16天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
3月前
|
存储 NoSQL API
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
135 0
|
3月前
|
SQL 关系型数据库 MySQL
Python 数据库访问与ORM框架——打造高效开发利器
Python 作为一门广泛使用的编程语言,其在数据库访问方面也有着较为成熟的解决方案,其中ORM框架更是成为了开发者们的首选。本文将介绍 Python 中数据库访问和 ORM 框架的基本概念,以及如何使用 SQLAlchemy 这一优秀的 ORM 框架进行开发。
|
3月前
|
SQL 数据管理 数据库
Python数据库访问与ORM框架:探索高效数据管理的奥秘
在当今信息爆炸的时代,高效地管理和处理海量数据成为了企业和开发者的迫切需求。本文将介绍Python中的数据库访问技术以及ORM框架(如SQLAlchemy),探索其在数据管理方面的重要作用。通过使用Python数据库访问和ORM框架,开发者可以更轻松地操作数据库、提高代码可读性和维护性,并实现高效的数据持久化和查询。
|
3月前
|
关系型数据库 API 数据库
Python数据库访问与ORM框架:加速开发、提升效率
在现代软件开发中,数据库是不可或缺的组成部分。本文介绍了Python中数据库访问的重要性,并探讨了ORM框架(例如SQLAlchemy)如何帮助程序员加速开发、提升效率。通过使用ORM框架,开发人员可以轻松地将Python对象映射到数据库表,并且可以通过简洁的API进行数据库操作。此外,本文还讨论了ORM框架在处理复杂查询、维护数据一致性和实现数据库迁移方面的优势。
|
3月前
|
SQL Java 关系型数据库
数据库访问:什么是Hibernate框架?
数据库访问:什么是Hibernate框架?
24 0