C#连接、访问MySQL数据库

一、准备工具

visual stuido(本示例使用visual studio 2010)

MySql.Data.dll

mysql_installer_community_V5.6.21.1_setup.1415604646.msi(网上搜索去下载或者向我索要,联系方式在http://xunwn.com/1010100

二、新建DBUtility通用访问MySQL类库

1、在解决方案中新建一个DBUtility类库,作为访问MySQL的通用sql语句存放地点



2、引入MySql.Data.dll



3、配置web.config MySQL数据库连接字符串

在解决方案根目录下打开web.config配置文件,在connectionStrings节点中加入MySQL连接字符串

1

2

3

<connectionStrings>

  <add name="DBConnectionString" connectionString="Data Source=127.0.0.1;Database=你的数据库名;User ID=用户名;Password=密码" providerName="MySql.Data.MySqlClient"/>

</connectionStrings>

4、新建SQLHelper通用MySQL访问类,该类的定义如下:  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

/// <summary>

    ///SQLHelper 的摘要说明

    /// </summary>

    public abstract class SQLHelper

    {

        //数据库连接字符串(注意:这里的“DBConnectionString”一定要与web.config文件中connectionStrings节点值一致)

        public static readonly string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnectionString"].ToString();

 

 

        // 用于缓存参数的HASH表

        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

 

 

        /// <summary>

        ///  给定连接的数据库用假设参数执行一个sql命令(不返回数据集)

        /// </summary>

        /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

        /// <param name="cmdText">存储过程名称或者sql命令语句</param>

        /// <param name="commandParameters">执行命令所用参数的集合</param>

        /// <returns>执行命令所影响的行数</returns>

        public static int ExecuteNonQuery(string cmdText, CommandType cmdType = CommandType.Text, params MySqlParameter[] commandParameters)

        {

 

 

            MySqlCommand cmd = new MySqlCommand();

 

 

            using (MySqlConnection conn = new MySqlConnection(connectionString))

            {

                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

                int val = cmd.ExecuteNonQuery();

                cmd.Parameters.Clear();

                return val;

            }

        }

 

 

        /// <summary>

        /// 用执行的数据库连接执行一个返回数据集的sql命令

        /// </summary>

        /// <remarks>

        /// 举例:

        ///  MySqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));

        /// </remarks>

        /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

        /// <param name="cmdText">存储过程名称或者sql命令语句</param>

        /// <param name="commandParameters">执行命令所用参数的集合</param>

        /// <returns>包含结果的读取器</returns>

        public static MySqlDataReader ExecuteReader(string cmdText, CommandType cmdType = CommandType.Text, params MySqlParameter[] commandParameters)

        {

            //创建一个MySqlCommand对象

            MySqlCommand cmd = new MySqlCommand();

            //创建一个MySqlConnection对象

            MySqlConnection conn = new MySqlConnection(connectionString);

 

 

            //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,

            //因此commandBehaviour.CloseConnection 就不会执行

            try

            {

                //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数

                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

                //调用 MySqlCommand  的 ExecuteReader 方法

                MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                //清除参数

                cmd.Parameters.Clear();

                return reader;

            }

            catch

            {

                //关闭连接,抛出异常

                conn.Close();

                throw;

            }

        }

 

 

        /// <summary>

        /// 返回DataSet

        /// </summary>

        /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

        /// <param name="cmdText">存储过程名称或者sql命令语句</param>

        /// <param name="commandParameters">执行命令所用参数的集合</param>

        /// <returns></returns>

        public static DataSet GetDataSet(string cmdText, CommandType cmdType = CommandType.Text, params MySqlParameter[] commandParameters)

        {

            //创建一个MySqlCommand对象

            MySqlCommand cmd = new MySqlCommand();

            //创建一个MySqlConnection对象

            MySqlConnection conn = new MySqlConnection(connectionString);

 

 

            //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,

 

 

            try

            {

                //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数

                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

                //调用 MySqlCommand  的 ExecuteReader 方法

                MySqlDataAdapter adapter = new MySqlDataAdapter();

                adapter.SelectCommand = cmd;

                DataSet ds = new DataSet();

 

 

                adapter.Fill(ds);

                //清除参数

                cmd.Parameters.Clear();

                conn.Close();

                return ds;

            }

            catch (Exception e)

            {

                throw e;

            }

        }

 

 

 

        /// <summary>

        /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列

        /// </summary>

        /// <remarks>

        ///例如:

        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));

        /// </remarks>

        /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

        /// <param name="cmdText">存储过程名称或者sql命令语句</param>

        /// <param name="commandParameters">执行命令所用参数的集合</param>

        /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>

        public static object ExecuteScalar(string cmdText, CommandType cmdType = CommandType.Text, params MySqlParameter[] commandParameters)

        {

            MySqlCommand cmd = new MySqlCommand();

 

 

            using (MySqlConnection connection = new MySqlConnection(connectionString))

            {

                PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);

                object val = cmd.ExecuteScalar();

                cmd.Parameters.Clear();

                return val;

            }

        }

 

 

        /// <summary>

        /// 将参数集合添加到缓存

        /// </summary>

        /// <param name="cacheKey">添加到缓存的变量</param>

        /// <param name="commandParameters">一个将要添加到缓存的sql参数集合</param>

        public static void CacheParameters(string cacheKey, params MySqlParameter[] commandParameters)

        {

            parmCache[cacheKey] = commandParameters;

        }

 

 

        /// <summary>

        /// 找回缓存参数集合

        /// </summary>

        /// <param name="cacheKey">用于找回参数的关键字</param>

        /// <returns>缓存的参数集合</returns>

        public static MySqlParameter[] GetCachedParameters(string cacheKey)

        {

            MySqlParameter[] cachedParms = (MySqlParameter[])parmCache[cacheKey];

 

 

            if (cachedParms == null)

                return null;

 

 

            MySqlParameter[] clonedParms = new MySqlParameter[cachedParms.Length];

 

 

            for (int i = 0, j = cachedParms.Length; i < j; i++)

                clonedParms[i] = (MySqlParameter)((ICloneable)cachedParms[i]).Clone();

 

 

            return clonedParms;

        }

 

 

        /// <summary>

        /// 准备执行一个命令

        /// </summary>

        /// <param name="cmd">sql命令</param>

        /// <param name="conn">OleDb连接</param>

        /// <param name="trans">OleDb事务</param>

        /// <param name="cmdType">命令类型例如 存储过程或者文本</param>

        /// <param name="cmdText">命令文本,例如:Select * from Products</param>

        /// <param name="cmdParms">执行命令的参数</param>

        private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)

        {

            if (conn.State != ConnectionState.Open)

                conn.Open();

 

 

            cmd.Connection = conn;

            cmd.CommandText = cmdText;

 

 

            if (trans != null)

                cmd.Transaction = trans;

 

 

            cmd.CommandType = cmdType;

 

 

            if (cmdParms != null)

            {

                foreach (MySqlParameter parameter in cmdParms)

                {

                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&

                        (parameter.Value == null))

                    {

                        parameter.Value = DBNull.Value;

                    }

                    cmd.Parameters.Add(parameter);

                }

            }

        }

 

 

    }

 

三、访问MySQL数据库(增删查改)

提示:sql语句无论是oracle、mysql、sqlserver,增删查改语句大体相似,皆为insert、delete、update、select操作,故熟悉一种数据库操作语句后,亦可相对容易学习其他数据库语句

1

2

3

4

5

using System.Collections.Generic;

using System.Text;

using MySql.Data.MySqlClient;

using System.Data;

using DBUtility;

  

1、插入操作(insert)

示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

public int Add( int userId, string name)

{

    StringBuilder sb = new StringBuilder();

    sb.Append("INSERT INTO T_Photo(Name,UserID) ");

    sb.Append("VALUES(?Name,?UserID) ");

    MySqlParameter[] parameters = {

                                     new MySqlParameter("?Name", MySqlDbType.String),

                                     new MySqlParameter("?UserID", MySqlDbType.Int32)

                                 };

    parameters[0].Value = name;

    parameters[1].Value = userId;

    return SQLHelper.ExecuteNonQuery(sb.ToString(), CommandType.Text, parameters);

}

  

2、删除操作(delete)

示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

public int Delete(long id, int userId)

{

    StringBuilder sb = new StringBuilder();

    sb.Append("DELETE FROM T_Photo WHERE ID = ?ID AND UserID = ?UserID");

    MySqlParameter[] parameters = {

                                     new MySqlParameter("?ID", MySqlDbType.Int64),

                                     new MySqlParameter("?UserID", MySqlDbType.Int32)

                                 };

    parameters[0].Value = id;

    parameters[1].Value = userId;

    return SQLHelper.ExecuteNonQuery(sb.ToString(), CommandType.Text, parameters);

}

  

3、修改操作(update)

示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public int EditName(long id, int userId, string name)

{

    StringBuilder sb = new StringBuilder();

    sb.Append("UPDATE T_Photo SET Name = ?Name WHERE ID = ?ID AND UserID = ?UserID");

    MySqlParameter[] parameters = {

                                     new MySqlParameter("?ID", MySqlDbType.Int64),

                                     new MySqlParameter("?UserID", MySqlDbType.Int32),

                                     new MySqlParameter("?Name", MySqlDbType.String)

                                 };

    parameters[0].Value = id;

    parameters[1].Value = userId;

    parameters[2].Value = name;

    return SQLHelper.ExecuteNonQuery(sb.ToString(), CommandType.Text, parameters);

}

  

4、查询操作(select)

示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

public MySqlDataReader GetListByOrderCode(string orderCode)

{

    StringBuilder sb = new StringBuilder();

    sb.Append("SELECT ID,OrderCount,Subtotal,ProductID, ");

    sb.Append("FROM t_orderdetail  ");

 

 

    //筛选条件

    sb.Append("WHERE OrderCode = ?OrderCode ");

 

 

    //排序

    sb.Append("ORDER BY ID DESC ");

 

 

    MySqlParameter[] parameters = {

                                     new MySqlParameter("?OrderCode", MySqlDbType.String)

                                 };

 

 

    parameters[0].Value = orderCode;

    return SQLHelper.ExecuteReader(sb.ToString(), CommandType.Text, parameters);

 

}

  

5、调用存储过程

示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public int BackOrder(long id)

{

    StringBuilder sb = new StringBuilder();

 

 

    sb.Append("BackOrder ");//存储过程名称

 

 

    MySqlParameter[] parameters = {

                                     new MySqlParameter("?OrderId", MySqlDbType.Int64)//OrderId必须与存储过程参数名、数据类型一致

                                 };

    parameters[0].Value = id;

    return MyCustomSQLHelper.ExecuteNonQuery(sb.ToString(), CommandType.StoredProcedure, parameters);

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值