zoukankan      html  css  js  c++  java
  • 在.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/, 够全的了。
    作者: XuGang   网名:钢钢
    出处: http://xugang.cnblogs.com
    声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址!
  • 相关阅读:
    2019省赛训练组队赛4.9周二 2017浙江省赛
    #Leetcode# 49. Group Anagrams
    #Leetcode# 57. Insert Interval
    POJ 2195 Going Home
    HDU 2255 奔小康赚大钱
    HDU 1083 Courses
    HDU 2063 过山车
    POJ 3041 Asteroids
    指针的妙处
    jzoj 6273. 2019.8.4【NOIP提高组A】欠钱 (money)
  • 原文地址:https://www.cnblogs.com/xugang/p/883282.html
Copyright © 2011-2022 走看看