一、SQL Server 相關 1 /// <summary> 2 /// 資料庫的通用訪問代碼 3 /// 此類為抽象類, 4 /// 不允許實例化,在應用時直接調用即可 5 /// </summary> 6 public abstract class SqlHelper 7 { 8 /// <s ...
一、SQL Server 相關
1 /// <summary> 2 /// 資料庫的通用訪問代碼 3 /// 此類為抽象類, 4 /// 不允許實例化,在應用時直接調用即可 5 /// </summary> 6 public abstract class SqlHelper 7 { 8 /// <summary> 9 /// 資料庫連接字元串 10 /// </summary> 11 12 public static string connectionString = ""; 13 14 15 // Hashtable to store cached parameters 16 private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable()); 17 18 #region ExecteNonQuery操作方法集合 19 /// <summary> 20 ///執行一個不需要返回值的SqlCommand命令,通過指定專用的連接字元串。 21 /// 使用參數數組形式提供參數列表 22 /// </summary> 23 /// <param name="connectionString">一個有效的資料庫連接字元串</param> 24 /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param> 25 /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> 26 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 27 /// <returns>返回一個數值表示此SqlCommand命令執行後影響的行數</returns> 28 public static bool ExecteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 29 { 30 try 31 { 32 SqlCommand cmd = new SqlCommand(); 33 using (SqlConnection conn = new SqlConnection(connectionString)) 34 { 35 //通過PrePareCommand方法將參數逐個加入到SqlCommand的參數集合中 36 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 37 int val = cmd.ExecuteNonQuery(); 38 //清空SqlCommand中的參數列表 39 cmd.Parameters.Clear(); 40 return val > 0 ? true : false; 41 } 42 } 43 catch 44 { 45 return false; 46 } 47 48 } 49 50 /// <summary> 51 ///執行一個不需要返回值的SqlCommand命令,通過指定專用的連接字元串。 52 /// 使用參數數組形式提供參數列表 53 /// </summary> 54 /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param> 55 /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> 56 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 57 /// <returns>返回一個數值表示此SqlCommand命令執行後影響的行數</returns> 58 public static bool ExecteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 59 { 60 try 61 { 62 return ExecteNonQuery(connectionString, cmdType, cmdText, commandParameters); 63 } 64 catch 65 { 66 return false; 67 } 68 69 } 70 71 /// <summary> 72 ///存儲過程專用 73 /// </summary> 74 /// <param name="cmdText">存儲過程的名字</param> 75 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 76 /// <returns>返回一個數值表示此SqlCommand命令執行後影響的行數</returns> 77 public static bool ExecteNonQueryProducts(string cmdText, params SqlParameter[] commandParameters) 78 { 79 try 80 { 81 return ExecteNonQuery(CommandType.StoredProcedure, cmdText, commandParameters); 82 83 } 84 catch 85 { 86 return false; 87 } 88 } 89 90 /// <summary> 91 ///Sql語句專用 92 /// </summary> 93 /// <param name="cmdText">T_Sql語句</param> 94 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 95 /// <returns>返回一個數值表示此SqlCommand命令執行後影響的行數</returns> 96 public static bool ExecteNonQueryText(string cmdText, params SqlParameter[] commandParameters) 97 { 98 try 99 { 100 return ExecteNonQuery(CommandType.Text, cmdText, commandParameters); 101 } 102 catch 103 { 104 return false; 105 } 106 107 } 108 109 #endregion 110 111 112 #region GetTable操作方法集合 113 114 /// <summary> 115 /// 執行一條返回結果集的SqlCommand,通過一個已經存在的資料庫連接 116 /// 使用參數數組提供參數 117 /// </summary> 118 /// <param name="connecttionString">一個現有的資料庫連接</param> 119 /// <param name="cmdTye">SqlCommand命令類型</param> 120 /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> 121 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 122 /// <returns>返回一個表集合(DataTableCollection)表示查詢得到的數據集</returns> 123 public static DataTableCollection GetTable(string connecttionString, CommandType cmdTye, string cmdText, SqlParameter[] commandParameters) 124 { 125 try 126 { 127 SqlCommand cmd = new SqlCommand(); 128 DataSet ds = new DataSet(); 129 using (SqlConnection conn = new SqlConnection(connecttionString)) 130 { 131 PrepareCommand(cmd, conn, null, cmdTye, cmdText, commandParameters); 132 SqlDataAdapter adapter = new SqlDataAdapter(); 133 adapter.SelectCommand = cmd; 134 adapter.Fill(ds); 135 } 136 DataTableCollection table = ds.Tables; 137 return table; 138 } 139 catch (Exception ex) 140 { 141 return null; 142 } 143 144 } 145 146 /// <summary> 147 /// 執行一條返回結果集的SqlCommand,通過一個已經存在的資料庫連接 148 /// 使用參數數組提供參數 149 /// </summary> 150 /// <param name="cmdTye">SqlCommand命令類型</param> 151 /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> 152 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 153 /// <returns>返回一個表集合(DataTableCollection)表示查詢得到的數據集</returns> 154 public static DataTableCollection GetTable(CommandType cmdTye, string cmdText, SqlParameter[] commandParameters) 155 { 156 try 157 { 158 return GetTable(SqlHelper.connectionString, cmdTye, cmdText, commandParameters); 159 } 160 catch 161 { 162 return null; 163 164 } 165 166 } 167 168 /// <summary> 169 /// 存儲過程專用 170 /// </summary> 171 /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> 172 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 173 /// <returns>返回一個表集合(DataTableCollection)表示查詢得到的數據集</returns> 174 public static DataTableCollection GetTableProducts(string cmdText, SqlParameter[] commandParameters) 175 { 176 try 177 { 178 return GetTable(CommandType.StoredProcedure, cmdText, commandParameters); 179 } 180 catch 181 { 182 return null; 183 } 184 } 185 186 /// <summary> 187 /// Sql語句專用 188 /// </summary> 189 /// <param name="cmdText"> T-SQL 語句</param> 190 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 191 /// <returns>返回一個表集合(DataTableCollection)表示查詢得到的數據集</returns> 192 public static DataTableCollection GetTableText(string cmdText, SqlParameter[] commandParameters) 193 { 194 try 195 { 196 return GetTable(CommandType.Text, cmdText, commandParameters); 197 } 198 catch 199 { 200 System.Windows.Forms.MessageBox.Show("查詢後臺出現錯誤,請重試!"); 201 return null; 202 } 203 } 204 205 #endregion 206 207 208 #region 檢查是否存在 209 /// <summary> 210 /// 檢查是否存在 存在:true 211 /// </summary> 212 /// <param name="strSql">Sql語句</param> 213 /// <param name="cmdParms">參數</param> 214 /// <returns>bool結果</returns> 215 public static bool Exists(string strSql, params SqlParameter[] cmdParms) 216 { 217 try 218 { 219 int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, cmdParms)); 220 if (cmdresult == 0) 221 { 222 return false; 223 } 224 else 225 { 226 return true; 227 } 228 } 229 catch (Exception ex) 230 { 231 return false; 232 } 233 234 } 235 #endregion 236 237 238 #region 各方法SqlParameter參數處理 239 /// <summary> 240 /// 為執行命令準備參數 241 /// </summary> 242 /// <param name="cmd">SqlCommand 命令</param> 243 /// <param name="conn">已經存在的資料庫連接</param> 244 /// <param name="trans">資料庫事物處理</param> 245 /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param> 246 /// <param name="cmdText">Command text,T-SQL語句 例如 Select * from Products</param> 247 /// <param name="cmdParms">返回帶參數的命令</param> 248 private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) 249 { 250 try 251 { 252 //判斷資料庫連接狀態 253 if (conn.State != ConnectionState.Open) 254 conn.Open(); 255 cmd.Connection = conn; 256 cmd.CommandText = cmdText; 257 //判斷是否需要事物處理 258 if (trans != null) 259 cmd.Transaction = trans; 260 cmd.CommandType = cmdType; 261 if (cmdParms != null) 262 { 263 foreach (SqlParameter parm in cmdParms) 264 cmd.Parameters.Add(parm); 265 } 266 } 267 catch(Exception ex) 268 { 269 MessageBox.Show("連接伺服器發生錯誤,請檢查!", "錯誤!", MessageBoxButtons.OK, MessageBoxIcon.Error); 270 System.Environment.Exit(0); 271 } 272 273 } 274 275 #endregion 276 277 278 #region 其他查詢方法集合 279 280 /// <summary> 281 /// 執行命令,返回一個在連接字元串中指定的資料庫結果集 282 /// 使用所提供的參數。 283 /// </summary> 284 /// <param name="connectionString">一個有效的資料庫連接字元串</param> 285 /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param> 286 /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> 287 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 288 /// <returns>A SqlDataReader containing the results</returns> 289 public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 290 { 291 SqlCommand cmd = new SqlCommand(); 292 SqlConnection conn = new SqlConnection(connectionString); 293 // we use a try/catch here because if the method throws an exception we want to 294 // close the connection throw code, because no datareader will exist, hence the 295 // commandBehaviour.CloseConnection will not work 296 try 297 { 298 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 299 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 300 cmd.Parameters.Clear(); 301 return rdr; 302 } 303 catch 304 { 305 conn.Close(); 306 throw; 307 } 308 } 309 310 #region//ExecuteDataSet方法 311 312 /// <summary> 313 /// return a dataset 314 /// </summary> 315 /// <param name="connectionString">一個有效的資料庫連接字元串</param> 316 /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param> 317 /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> 318 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 319 /// <returns>return a dataset</returns> 320 public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 321 { 322 SqlCommand cmd = new SqlCommand(); 323 try 324 { 325 using (SqlConnection conn = new SqlConnection(connectionString)) 326 { 327 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 328 SqlDataAdapter da = new SqlDataAdapter(); 329 DataSet ds = new DataSet(); 330 da.SelectCommand = cmd; 331 da.Fill(ds); 332 return ds; 333 } 334 } 335 catch 336 { 337 throw; 338 } 339 } 340 341 /// <summary> 342 /// 返回一個DataSet 343 /// </summary> 344 /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param> 345 /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> 346 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 347 /// <returns>return a dataset</returns> 348 public static DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 349 { 350 return ExecuteDataSet(connectionString, cmdType, cmdText, commandParameters); 351 } 352 353 /// <summary> 354 /// 返回一個DataSet 355 /// </summary> 356 /// <param name="cmdText">存儲過程的名字</param> 357 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 358 /// <returns>return a dataset</returns> 359 public static DataSet ExecuteDataSetProducts(string cmdText, params SqlParameter[] commandParameters) 360 { 361 return ExecuteDataSet(connectionString, CommandType.StoredProcedure, cmdText, commandParameters); 362 } 363 364 /// <summary> 365 /// 返回一個DataSet 366 /// </summary> 367 /// <param name="cmdText">T-SQL 語句</param> 368 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 369 /// <returns>return a dataset</returns> 370 public static DataSet ExecuteDataSetText(string cmdText, params SqlParameter[] commandParameters) 371 { 372 return ExecuteDataSet(connectionString, CommandType.Text, cmdText, commandParameters); 373 } 374 375 public static DataView ExecuteDataSet(string connectionString, string sortExpression, string direction, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 376 { 377 SqlCommand cmd = new SqlCommand(); 378 try 379 { 380 using (SqlConnection conn = new SqlConnection(connectionString)) 381 { 382 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 383 SqlDataAdapter da = new SqlDataAdapter(); 384 DataSet ds = new DataSet(); 385 da.SelectCommand = cmd; 386 da.Fill(ds); 387 DataView dv = ds.Tables[0].DefaultView; 388 dv.Sort = sortExpression + " " + direction; 389 return dv; 390 } 391 } 392 catch 393 { 394 395 throw; 396 } 397 } 398 #endregion 399 400 #region // ExecuteScalar方法 401 402 /// <summary> 403 /// 返回第一行的第一列 404 /// </summary> 405 /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param> 406 /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> 407 /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> 408 /// <returns>返回一個對象</returns> 409 public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 410 { 411 return ExecuteScalar(SqlHelper.connectionString, cmdType, cmdText, commandParameters); 412 } 413 414 /// <summary> 415 /// 返回第一行的第一列存儲過程專用 416 /// </summary> 417 /// <param name="cmdText">存儲過程的名字</param> 418 /// <param name="commandParameters">