這篇文章主要介紹了C#實現操作MySql數據層類MysqlHelper,實例分析了C#操作MySQL的常用技巧,並將其封裝入一個類中以方便調用。
本文實例講述了C#實現操作MySql數據層類MysqlHelper。分享給大家供大家參考。具體如下:
1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Text; 7 using System.Xml.Linq; 8 using MySql.Data; 9 using MySql.Data.MySqlClient; 10 namespace XX.DAL 11 { 12 public abstract class MySqlHelper 13 { 14 //數據庫連接字符串 15 public static string Conn = "Database='device_manage';Data Source='localhost';User Id='root';Password='123456';charset='utf8';pooling=true;Allow Zero Datetime=True"; 16 17 /// <summary> 18 /// 給定連接的數據庫用假設參數執行一個sql命令(不返回數據集) 19 /// </summary> 20 /// <param name="connectionString">一個有效的連接字符串</param> 21 /// <param name="cmdType">命令類型(存儲過程, 文本, 等等)</param> 22 /// <param name="cmdText">存儲過程名稱或者sql命令語句</param> 23 /// <param name="commandParameters">執行命令所用參數的集合</param> 24 /// <returns>執行命令所影響的行數</returns> 25 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 26 { 27 MySqlCommand cmd = new MySqlCommand(); 28 using (MySqlConnection conn = new MySqlConnection(connectionString)) 29 { 30 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 31 int val = cmd.ExecuteNonQuery(); 32 cmd.Parameters.Clear(); 33 return val; 34 } 35 } 36 37 /// <summary> 38 /// 用現有的數據庫連接執行一個sql命令(不返回數據集) 39 /// </summary> 40 /// <param name="connection">一個現有的數據庫連接</param> 41 /// <param name="cmdType">命令類型(存儲過程, 文本, 等等)</param> 42 /// <param name="cmdText">存儲過程名稱或者sql命令語句</param> 43 /// <param name="commandParameters">執行命令所用參數的集合</param> 44 /// <returns>執行命令所影響的行數</returns> 45 public static int ExecuteNonQuery(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 46 { 47 MySqlCommand cmd = new MySqlCommand(); 48 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 49 int val = cmd.ExecuteNonQuery(); 50 cmd.Parameters.Clear(); 51 return val; 52 } 53 54 /// <summary> 55 ///使用現有的SQL事務執行一個sql命令(不返回數據集) 56 /// </summary> 57 /// <remarks> 58 ///舉例: 59 /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); 60 /// </remarks> 61 /// <param name="trans">一個現有的事務</param> 62 /// <param name="cmdType">命令類型(存儲過程, 文本, 等等)</param> 63 /// <param name="cmdText">存儲過程名稱或者sql命令語句</param> 64 /// <param name="commandParameters">執行命令所用參數的集合</param> 65 /// <returns>執行命令所影響的行數</returns> 66 public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 67 { 68 MySqlCommand cmd = new MySqlCommand(); 69 PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters); 70 int val = cmd.ExecuteNonQuery(); 71 cmd.Parameters.Clear(); 72 return val; 73 } 74 75 /// <summary> 76 /// 用執行的數據庫連接執行一個返回數據集的sql命令 77 /// </summary> 78 /// <remarks> 79 /// 舉例: 80 /// MySqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); 81 /// </remarks> 82 /// <param name="connectionString">一個有效的連接字符串</param> 83 /// <param name="cmdType">命令類型(存儲過程, 文本, 等等)</param> 84 /// <param name="cmdText">存儲過程名稱或者sql命令語句</param> 85 /// <param name="commandParameters">執行命令所用參數的集合</param> 86 /// <returns>包含結果的讀取器</returns> 87 public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 88 { 89 //創建一個MySqlCommand對象 90 MySqlCommand cmd = new MySqlCommand(); 91 //創建一個MySqlConnection對象 92 MySqlConnection conn = new MySqlConnection(connectionString); 93 //在這里我們用一個try/catch結構執行sql文本命令/存儲過程,因為如果這個方法產生一個異常我們要關閉連接,因為沒有讀取器存在, 94 //因此commandBehaviour.CloseConnection 就不會執行 95 try 96 { 97 //調用 PrepareCommand 方法,對 MySqlCommand 對象設置參數 98 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 99 //調用 MySqlCommand 的 ExecuteReader 方法 100 MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 101 //清除參數 102 cmd.Parameters.Clear(); 103 return reader; 104 } 105 catch 106 { 107 //關閉連接,拋出異常 108 conn.Close(); 109 throw; 110 } 111 } 112 113 /// <summary> 114 /// 返回DataSet 115 /// </summary> 116 /// <param name="connectionString">一個有效的連接字符串</param> 117 /// <param name="cmdType">命令類型(存儲過程, 文本, 等等)</param> 118 /// <param name="cmdText">存儲過程名稱或者sql命令語句</param> 119 /// <param name="commandParameters">執行命令所用參數的集合</param> 120 /// <returns></returns> 121 public static DataSet GetDataSet(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 122 { 123 //創建一個MySqlCommand對象 124 MySqlCommand cmd = new MySqlCommand(); 125 //創建一個MySqlConnection對象 126 MySqlConnection conn = new MySqlConnection(connectionString); 127 //在這里我們用一個try/catch結構執行sql文本命令/存儲過程, 128 //因為如果這個方法產生一個異常我們要關閉連接,因為沒有讀取器存在, 129 try 130 { 131 //調用 PrepareCommand 方法,對 MySqlCommand 對象設置參數 132 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 133 //調用 MySqlCommand 的 ExecuteReader 方法 134 MySqlDataAdapter adapter = new MySqlDataAdapter(); 135 adapter.SelectCommand = cmd; 136 DataSet ds = new DataSet(); 137 adapter.Fill(ds); 138 //清除參數 139 cmd.Parameters.Clear(); 140 conn.Close(); 141 return ds; 142 } 143 catch (Exception e) 144 { 145 throw e; 146 } 147 } 148 149 /// <summary> 150 /// 用指定的數據庫連接字符串執行一個命令並返回一個數據集的第一列 151 /// </summary> 152 /// <remarks> 153 ///例如: 154 /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); 155 /// </remarks> 156 ///<param name="connectionString">一個有效的連接字符串</param> 157 /// <param name="cmdType">命令類型(存儲過程, 文本, 等等)</param> 158 /// <param name="cmdText">存儲過程名稱或者sql命令語句</param> 159 /// <param name="commandParameters">執行命令所用參數的集合</param> 160 /// <returns>用 Convert.To{Type}把類型轉換為想要的 </returns> 161 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 162 { 163 MySqlCommand cmd = new MySqlCommand(); 164 using (MySqlConnection connection = new MySqlConnection(connectionString)) 165 { 166 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 167 object val = cmd.ExecuteScalar(); 168 cmd.Parameters.Clear(); 169 return val; 170 } 171 } 172 173 /// <summary> 174 /// 用指定的數據庫連接執行一個命令並返回一個數據集的第一列 175 /// </summary> 176 /// <remarks> 177 /// 例如: 178 /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); 179 /// </remarks> 180 /// <param name="connection">一個存在的數據庫連接</param> 181 /// <param name="cmdType">命令類型(存儲過程, 文本, 等等)</param> 182 /// <param name="cmdText">存儲過程名稱或者sql命令語句</param> 183 /// <param name="commandParameters">執行命令所用參數的集合</param> 184 /// <returns>用 Convert.To{Type}把類型轉換為想要的 </returns> 185 public static object ExecuteScalar(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 186 { 187 MySqlCommand cmd = new MySqlCommand(); 188 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 189 object val = cmd.ExecuteScalar(); 190 cmd.Parameters.Clear(); 191 return val; 192 } 193 194 /// <summary> 195 /// 准備執行一個命令 196 /// </summary> 197 /// <param name="cmd">sql命令</param> 198 /// <param name="conn">OleDb連接</param> 199 /// <param name="trans">OleDb事務</param> 200 /// <param name="cmdType">命令類型例如 存儲過程或者文本</param> 201 /// <param name="cmdText">命令文本,例如:Select * from Products</param> 202 /// <param name="cmdParms">執行命令的參數</param> 203 private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms) 204 { 205 if (conn.State != ConnectionState.Open) 206 conn.Open(); 207 cmd.Connection = conn; 208 cmd.CommandText = cmdText; 209 if (trans != null) 210 cmd.Transaction = trans; 211 cmd.CommandType = cmdType; 212 if (cmdParms != null) 213 { 214 foreach (MySqlParameter parm in cmdParms) 215 cmd.Parameters.Add(parm); 216 } 217 } 218 } 219 }