开发者社区> 老朱教授> 正文

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

简介:
+关注继续查看

在.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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java连接访问MySQL数据
本文通过mysql-connector-java连接并访问MySQL数据。
110 0
mysql多线程访问总结
mysql多线程访问总结
47 0
MySQL用C访问的示例代码
MySQL用C访问的示例代码
28 0
C++访问MySql
C++访问MySql
58 0
Ubuntu下MySQL无法启动和访问的问题解决与修复(二)
Ubuntu下MySQL无法启动和访问的问题解决与修复
71 0
Ubuntu下MySQL无法启动和访问的问题解决与修复(一)
Ubuntu下MySQL无法启动和访问的问题解决与修复
158 0
Ubuntu下MySQL无法启动和访问的问题解决与修复
Ubuntu下MySQL无法启动和访问的问题解决与修复
134 0
Linux中安装Docker,在Docker中安装MySQL和Redis并在Windows下连接访问(图文教程)
Linux中安装Docker,在Docker中安装MySQL和Redis并在Windows下连接访问(图文教程)
195 0
如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)
文章目录 写在前面 1 操作准备 1.1 导入 Mysql 对应的 jar 包 1.2 创建Mysql数据库与基本表 2 JDBC基础实验 2.1 编写JDBC连接MySQL数据库myuser,查询并显示account表数据实例 2.2 编写JDBC连接MySQL数据库,实现myuser数据库的增、删、改查的实例 3 JDBC进阶实验——简易登录界面 3.1 具体实现 3.2 效果展示 写在最后
70 0
小程序中如何访问mysql数据库
小程序中如何访问mysql数据库
129 0
MySQL优化学习手札(四) 单表访问方法
MySQL优化学习手札(四) 单表访问方法
49 0
JDBC连接MySQL数据库,访问数据库信息完成登录功能(完整代码)
JDBC连接MySQL数据库,访问数据库信息完成登录功能
59 0
JDBC连接MySQL数据库,访问数据库信息完成登录功能
JDBC连接MySQL数据库,访问数据库信息完成登录功能
131 0
SpringBoot 实战 | 用 JdbcTemplates 访问 Mysql
如题,今天介绍 springboot 通过jdbc访问关系型mysql,通过 spring 的 JdbcTemplate 去访问。
61 0
+关注
老朱教授
文章
问答
视频
相关电子书
更多
高效MySQL的N个习惯
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像