.Net与mysql连接

首先去mysql网站下载一个mysql非安装版本

_ http://dev.mysql.com/downloads/mysql/5.0.html _

如果你感觉使用dos命令行不方便的话,可以顺便也下载一个GUI客户端:

_ http://dev.mysql.com/downloads/gui-tools/5.0.html _

然后打开vs…这个版本必须是2003以上。

然后呢,建立一个windowsApplication工程,然后在里面的app.config

如果你想把连接字符串写在程序里的话:将下面的代码改为 ** string ** strConn =  “server=localhost;user
id=root;password=;database=test;allow zero datetime= ** true ** ;”

这里与sqlserver连接字符串相区别的是:

user->user id,

当然估计没有下载MySql.Data.dll所以在

_ http://dev.mysql.com/downloads/connector/net/5.2.html _
下载

然后在net工程里添加引用,找到刚才你下载MySql.Data.dll的压缩包,解压后,在bin目录下有MySql.Data.dll.

添加成功后,在你的代码里添加一个

using MySql.Data.MySqlClient;

然后下面的和SqlClient的效果是一样的。只不过前面多了"My"

下面看具体的代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. using MySql.Data.MySqlClient;
      1. namespace SqlConnect
  6. {
  7. /// 
  8. /// author: chico chen
  9. /// date: 2008-11-02
  10. /// 
  11. public class SqlAccess
  12. {
  13. private MySqlConnection conn = null ;
  14. private MySqlCommand cmd = null ;
  15. /// 
  16. /// 建立与数据库的连接
  17. /// 
  18. /// 
  19. private MySqlConnection CreateConn()
  20. {
  21. string strConn = System.Configuration.ConfigurationSettings.AppSettings[ “Restaurant” ].ToString();
  22. // SqlConnection 对象
  23. conn = new MySqlConnection(strConn);
  24. try
  25. {
  26. conn.Open();
  27. return conn;
  28. }
  29. catch (Exception e)
  30. {
  31. Console.WriteLine( “sql 连接未打开” );
  32. return null ;
  33. }
  34. }
  35. /// 
  36. /// 关闭与数据库的连接
  37. /// 
  38. private void CloseConn()
  39. {
  40. try
  41. {
  42. conn.Close();
  43. }
  44. catch (Exception e)
  45. {
  46. Console.WriteLine( “sql 连接未关闭” );
  47. }
  48. }
    1. /// 
  49. /// 查询数据库
  50. /// 
  51. /// 类似于SELECT * FROM [User];
  52. /// 
  53. public DataSet SelectDataSet( string sql)
  54. {
  55. CreateConn();
  56. MySqlDataAdapter sda = new MySqlDataAdapter(sql, conn);
  57. DataSet ds = new DataSet();
  58. sda.Fill(ds);
  59. CloseConn();
  60. return ds;
  61. }
  62. /// 
  63. /// 执行无返回值的sql语句,如果成功返回true,失败返回false;
  64. /// 
  65. /// 类似于UPDATE [USER] SET userID=@userIDC  WHERE userID=@userID
  66. /// 或delete from [user] where userID=@userID;
  67. /// 或者insert into [user] (userID, password, name) values (@userID,@password,@Name) ;
  68. /// 
  69. ///  SqlParameter[] sp = new SqlParameter[3];
  70. ///  sp[0] = new SqlParameter(user, SqlDbType.VarChar, 50);
  71. /// sp[0].Value = “www”;
  72. /// 
  73. /// 
  74. public bool EXESql( string sqlcmd, MySqlParameter[] sqlPara)
  75. {
  76. try
  77. {
  78. CreateConn();
  79. cmd = new MySqlCommand();
  80. cmd.Connection = conn;
  81. cmd.CommandType = CommandType.Text;
  82. cmd.CommandText = sqlcmd;
  83. foreach (MySqlParameter sp in sqlPara)
  84. {
  85. cmd.Parameters.Add(sp);
  86. }
  87. cmd.ExecuteNonQuery();
  88. CloseConn();
  89. return true ;
  90. }
  91. catch (Exception e)
  92. {
  93. return false ;
  94. }
  95. }
    1. }
  96. }

这里调用的代码这样写:

DataSet ds = sqlAccess.SelectDataSet(“select * from user”);

当然如果你使用DataSet还要加using System.Data;

连接字符串中为什么要加Allow Zero datetime  = true是因为在添加数据库数据时,

添加了错误的dateTime数据,所以mysql自动将其转为0000-00-00 00:00:00,所以在

DataSet ds = new DataSet();
sda.Fill(ds);

这里就会报异常,原因是不支持这种Date/Time。

要使用刚才的接口的话:

  1. {
  2. DataSet ds = sqlAccess.SelectDataSet( “select * from user” );
      1. Array alist = ds.Tables[0].Rows[0].ItemArray;
  3. foreach ( object o in alist)
  4. {
  5. label1.Text += o.ToString();
  6. }
  7. UpdateName();
  8. }
      1. private const string sql = “UPDATE USER SET userName=@userName  WHERE userID=@userID” ;
  9. private const string userName = “@userName” ;
  10. private const string userID = “@userID” ;
  11. private void UpdateName()
  12. {
  13. int i = 1;
  14. string name = “xxxx” ;
  15. MySqlParameter[] my =
  16. {
  17. new MySqlParameter(userName,MySqlDbType.String),
  18. new MySqlParameter(userID,MySqlDbType.Int32)
  19. };
  20. my[0].Value = name;
  21. my[1].Value = i;
  22. label2.Text = sqlAccess.EXESql(sql, my).ToString();
  23. }