前端:
1 <My:AspNetPager class="arPage" PageSize="20" UrlPaging="true" runat="server" ID="pgServer" 2 CustomInfoHTML="共%PageCount%页[%RecordCount%条]记录<span>|</span>每页<em>%PageSize%</em>条<span>|</span>当前第<em>%CurrentPageIndex%</em>页" 3 FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" ShowCustomInfoSection="Left" 4 Height="18px" OnPageChanged="pgServer_PageChanged"> 5 </My:AspNetPager>
后台方法:
1 using Comm; 2 using System; 3 using System.Collections.Generic; 4 using System.Data; 5 using System.Linq; 6 using System.Web; 7 using System.Web.UI; 8 using System.Web.UI.WebControls; 9 10 public partial class Web_Admin_Sutestatus_statue_list : AdminPageBase 11 { 12 Maticsoft.BLL.tb_SiteStats tbSiteStatesBLL = new Maticsoft.BLL.tb_SiteStats(); 13 protected void Page_Load(object sender, EventArgs e) 14 { 15 if (!IsPostBack) 16 { 17 pgServer.RecordCount = tbSiteStatesBLL.GetRecordCount(""); 18 //loadData(); 19 } 20 } 21 /// <summary> 22 /// 加载数据 23 /// </summary> 24 public void loadData(string str) 25 { 26 DataSet data = tbSiteStatesBLL.GetListByPage(str, " VisitTime desc ", (pgServer.CurrentPageIndex - 1) * pgServer.PageSize + 1, (pgServer.CurrentPageIndex - 1) * pgServer.PageSize + pgServer.PageSize); 27 rpList.DataSource = data; 28 rpList.DataBind(); 29 } 30 31 /// <summary> 32 /// 删除 33 /// </summary> 34 /// <param name="sender"></param> 35 /// <param name="e"></param> 36 protected void But_Delete_Click(object sender, EventArgs e) 37 { 38 string ids = Request.Form["checkboxs"]; 39 if (string.IsNullOrEmpty(ids)) 40 { 41 return; 42 } 43 44 tbSiteStatesBLL.DeleteList(ids); 45 base.AddLog(3, "管理uc_id:" + ids); 46 loadData(""); 47 } 48 protected void pgServer_PageChanged(object src, EventArgs e) 49 { 50 loadData(""); 51 } 52 53 /// <summary> 54 /// 导出 55 /// </summary> 56 /// <param name="sender"></param> 57 /// <param name="e"></param> 58 //protected void But_Excel_Click(object sender, EventArgs e) 59 //{ 60 // string[] fileName = { "State_title", "Last_url", "State_url", "IsNewUser", "State_time", "IpAddress", "ExtStr1", "VisitTime", "VisitWay", "KeyWords", "UserAction", "Remark" }; 61 // string[] title = { "", "", "", "", "", "", "", "", "", "", "", "" }; 62 // DataToExcel.Export(fileName, title, "tb_SiteStats", "列表_" + DateTime.Now.ToString("yyy-MM-dd"), getStrWhere(), getSort()); 63 //} 64 65 protected void btnSearch_Click(object sender, EventArgs e) 66 { 67 string strWhere = " 1=1 "; 68 if (!string.IsNullOrEmpty(txt_Title.Text.Trim())) 69 { 70 strWhere += " and State_title like '%" + txt_Title.Text.Trim() + "%'"; 71 } 72 pgServer.RecordCount = tbSiteStatesBLL.GetRecordCount(strWhere); 73 loadData(strWhere); 74 } 75 }
DAL方法:
1 /// <summary> 2 /// 分页获取数据列表 3 /// </summary> 4 public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex) 5 { 6 StringBuilder strSql=new StringBuilder(); 7 strSql.Append("SELECT * FROM ( "); 8 strSql.Append(" SELECT ROW_NUMBER() OVER ("); 9 if (!string.IsNullOrEmpty(orderby.Trim())) 10 { 11 strSql.Append("order by T." + orderby ); 12 } 13 else 14 { 15 strSql.Append("order by T.ID desc"); 16 } 17 strSql.Append(")AS Row, T.* from tb_SiteStats T "); 18 if (!string.IsNullOrEmpty(strWhere.Trim())) 19 { 20 strSql.Append(" WHERE " + strWhere); 21 } 22 strSql.Append(" ) TT"); 23 strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex); 24 return DbHelperSQLServer.Query(strSql.ToString()); 25 }
DBHelperSqlServer类:
1 using System; 2 using System.Collections; 3 using System.Collections.Specialized; 4 using System.Data; 5 using System.Data.SqlClient; 6 using System.Configuration; 7 using System.Data.Common; 8 using System.Collections.Generic; 9 using Maticsoft.DBUtility; 10 11 namespace DAL 12 { 13 public abstract class DbHelperSQLServer 14 { 15 public static string connectionString = "Server=10.72.25.82;User ID=gwbnshweb;Password=gwbnsh@123;database=GwbnShWeb;Connection Reset=FALSE"; 16 //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. 17 //public static string connectionString = ConfigurationManager.ConnectionStrings["SqlConncectionString"].ConnectionString; 18 public DbHelperSQLServer() { } 19 20 #region 公用方法 21 /// <summary> 22 /// 判断是否存在某表的某个字段 23 /// </summary> 24 /// <param name="tableName">表名称</param> 25 /// <param name="columnName">列名称</param> 26 /// <returns>是否存在</returns> 27 public static bool ColumnExists(string tableName, string columnName) 28 { 29 string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'"; 30 object res = GetSingle(sql); 31 if (res == null) 32 { 33 return false; 34 } 35 return Convert.ToInt32(res) > 0; 36 } 37 public static int GetMinID(string FieldName, string TableName) 38 { 39 string strsql = "select min(" + FieldName + ") from " + TableName; 40 object obj = DbHelperSQLServer.GetSingle(strsql); 41 if (obj == null) 42 { 43 return 0; 44 } 45 else 46 { 47 return int.Parse(obj.ToString()); 48 } 49 } 50 public static int GetMaxID(string FieldName, string TableName) 51 { 52 string strsql = "select max(" + FieldName + ")+1 from " + TableName; 53 object obj = DbHelperSQLServer.GetSingle(strsql); 54 if (obj == null) 55 { 56 return 1; 57 } 58 else 59 { 60 return int.Parse(obj.ToString()); 61 } 62 } 63 public static bool Exists(string strSql) 64 { 65 object obj = DbHelperSQLServer.GetSingle(strSql); 66 int cmdresult; 67 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 68 { 69 cmdresult = 0; 70 } 71 else 72 { 73 cmdresult = int.Parse(obj.ToString()); 74 } 75 if (cmdresult == 0) 76 { 77 return false; 78 } 79 else 80 { 81 return true; 82 } 83 } 84 /// <summary> 85 /// 表是否存在 86 /// </summary> 87 /// <param name="TableName"></param> 88 /// <returns></returns> 89 public static bool TabExists(string TableName) 90 { 91 string strsql = "select count(*) from sysobjects where id = object_id(N'[" + TableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1"; 92 //string strsql = "SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + TableName + "]') AND type in (N'U')"; 93 object obj = DbHelperSQLServer.GetSingle(strsql); 94 int cmdresult; 95 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 96 { 97 cmdresult = 0; 98 } 99 else 100 { 101 cmdresult = int.Parse(obj.ToString()); 102 } 103 if (cmdresult == 0) 104 { 105 return false; 106 } 107 else 108 { 109 return true; 110 } 111 } 112 public static bool Exists(string strSql, params SqlParameter[] cmdParms) 113 { 114 object obj = DbHelperSQLServer.GetSingle(strSql, cmdParms); 115 int cmdresult; 116 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 117 { 118 cmdresult = 0; 119 } 120 else 121 { 122 cmdresult = int.Parse(obj.ToString()); 123 } 124 if (cmdresult == 0) 125 { 126 return false; 127 } 128 else 129 { 130 return true; 131 } 132 } 133 #endregion 134 135 #region 执行简单SQL语句 136 137 /// <summary> 138 /// 执行SQL语句,返回影响的记录数 139 /// </summary> 140 /// <param name="SQLString">SQL语句</param> 141 /// <returns>影响的记录数</returns> 142 public static int ExecuteSql(string SQLString) 143 { 144 using (SqlConnection connection = new SqlConnection(connectionString)) 145 { 146 using (SqlCommand cmd = new SqlCommand(SQLString, connection)) 147 { 148 try 149 { 150 connection.Open(); 151 int rows = cmd.ExecuteNonQuery(); 152 return rows; 153 } 154 catch (System.Data.SqlClient.SqlException e) 155 { 156 connection.Close(); 157 throw e; 158 } 159 } 160 } 161 } 162 163 /// <param name="connection">SqlConnection对象</param> 164 /// <param name="trans">SqlTransaction事件</param> 165 /// <param name="SQLString">SQL语句</param> 166 /// <returns>影响的记录数</returns> 167 public static int ExecuteSql(SqlConnection connection, SqlTransaction trans, string SQLString) 168 { 169 using (SqlCommand cmd = new SqlCommand(SQLString, connection)) 170 { 171 try 172 { 173 cmd.Connection = connection; 174 cmd.Transaction = trans; 175 int rows = cmd.ExecuteNonQuery(); 176 return rows; 177 } 178 catch (System.Data.SqlClient.SqlException e) 179 { 180 //trans.Rollback(); 181 throw e; 182 } 183 } 184 } 185 186 public static int ExecuteSqlByTime(string SQLString, int Times) 187 { 188 using (SqlConnection connection = new SqlConnection(connectionString)) 189 { 190 using (SqlCommand cmd = new SqlCommand(SQLString, connection)) 191 { 192 try 193 { 194 connection.Open(); 195 cmd.CommandTimeout = Times; 196 int rows = cmd.ExecuteNonQuery(); 197 return rows; 198 } 199 catch (System.Data.SqlClient.SqlException e) 200 { 201 connection.Close(); 202 throw e; 203 } 204 } 205 } 206 } 207 208 /// <summary> 209 /// 执行Sql和Oracle滴混合事务 210 /// </summary> 211 /// <param name="list">SQL命令行列表</param> 212 /// <param name="oracleCmdSqlList">Oracle命令行列表</param> 213 /// <returns>执行结果 0-由于SQL造成事务失败 -1 由于Oracle造成事务失败 1-整体事务执行成功</returns> 214 public static int ExecuteSqlTran(List<CommandInfo> list, List<CommandInfo> oracleCmdSqlList) 215 { 216 using (SqlConnection conn = new SqlConnection(connectionString)) 217 { 218 conn.Open(); 219 SqlCommand cmd = new SqlCommand(); 220 cmd.Connection = conn; 221 SqlTransaction tx = conn.BeginTransaction(); 222 cmd.Transaction = tx; 223 try 224 { 225 foreach (CommandInfo myDE in list) 226 { 227 string cmdText = myDE.CommandText; 228 SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters; 229 PrepareCommand(cmd, conn, tx, cmdText, cmdParms); 230 if (myDE.EffentNextType == EffentNextType.SolicitationEvent) 231 { 232 if (myDE.CommandText.ToLower().IndexOf("count(") == -1) 233 { 234 tx.Rollback(); 235 throw new Exception("违背要求" + myDE.CommandText + "必须符合select count(..的格式"); 236 //return 0; 237 } 238 239 object obj = cmd.ExecuteScalar(); 240 bool isHave = false; 241 if (obj == null && obj == DBNull.Value) 242 { 243 isHave = false; 244 } 245 isHave = Convert.ToInt32(obj) > 0; 246 if (isHave) 247 { 248 //引发事件 249 myDE.OnSolicitationEvent(); 250 } 251 } 252 if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine) 253 { 254 if (myDE.CommandText.ToLower().IndexOf("count(") == -1) 255 { 256 tx.Rollback(); 257 throw new Exception("SQL:违背要求" + myDE.CommandText + "必须符合select count(..的格式"); 258 //return 0; 259 } 260 261 object obj = cmd.ExecuteScalar(); 262 bool isHave = false; 263 if (obj == null && obj == DBNull.Value) 264 { 265 isHave = false; 266 } 267 isHave = Convert.ToInt32(obj) > 0; 268 269 if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave) 270 { 271 tx.Rollback(); 272 throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须大于0"); 273 //return 0; 274 } 275 if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave) 276 { 277 tx.Rollback(); 278 throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须等于0"); 279 //return 0; 280 } 281 continue; 282 } 283 int val = cmd.ExecuteNonQuery(); 284 if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0) 285 { 286 tx.Rollback(); 287 throw new Exception("SQL:违背要求" + myDE.CommandText + "必须有影响行"); 288 //return 0; 289 } 290 cmd.Parameters.Clear(); 291 } 292 //string oraConnectionString = PubConstant.GetConnectionString("ConnectionStringPPC"); 293 //bool res = OracleHelper.ExecuteSqlTran(oraConnectionString, oracleCmdSqlList); 294 //if (!res) 295 //{ 296 // tx.Rollback(); 297 // throw new Exception("Oracle执行失败"); 298 // return -1; 299 //} 300 tx.Commit(); 301 return 1; 302 } 303 catch (System.Data.SqlClient.SqlException e) 304 { 305 tx.Rollback(); 306 throw e; 307 } 308 catch (Exception e) 309 { 310 tx.Rollback(); 311 throw e; 312 } 313 } 314 } 315 /// <summary> 316 /// 执行多条SQL语句,实现数据库事务。 317 /// </summary> 318 /// <param name="SQLStringList">多条SQL语句</param> 319 public static int ExecuteSqlTran(List<String> SQLStringList) 320 { 321 using (SqlConnection conn = new SqlConnection(connectionString)) 322 { 323 conn.Open(); 324 SqlCommand cmd = new SqlCommand(); 325 cmd.Connection = conn; 326 SqlTransaction tx = conn.BeginTransaction(); 327 cmd.Transaction = tx; 328 try 329 { 330 int count = 0; 331 for (int n = 0; n < SQLStringList.Count; n++) 332 { 333 string strsql = SQLStringList[n]; 334 if (strsql.Trim().Length > 1) 335 { 336 cmd.CommandText = strsql; 337 count += cmd.ExecuteNonQuery(); 338 } 339 } 340 tx.Commit(); 341 return count; 342 } 343 catch 344 { 345 tx.Rollback(); 346 return 0; 347 } 348 } 349 } 350 /// <summary> 351 /// 执行带一个存储过程参数的的SQL语句。 352 /// </summary> 353 /// <param name="SQLString">SQL语句</param> 354 /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param> 355 /// <returns>影响的记录数</returns> 356 public static int ExecuteSql(string SQLString, string content) 357 { 358 using (SqlConnection connection = new SqlConnection(connectionString)) 359 { 360 SqlCommand cmd = new SqlCommand(SQLString, connection); 361 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText); 362 myParameter.Value = content; 363 cmd.Parameters.Add(myParameter); 364 try 365 { 366 connection.Open(); 367 int rows = cmd.ExecuteNonQuery(); 368 return rows; 369 } 370 catch (System.Data.SqlClient.SqlException e) 371 { 372 throw e; 373 } 374 finally 375 { 376 cmd.Dispose(); 377 connection.Close(); 378 } 379 } 380 } 381 /// <summary> 382 /// 执行带一个存储过程参数的的SQL语句。 383 /// </summary> 384 /// <param name="SQLString">SQL语句</param> 385 /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param> 386 /// <returns>影响的记录数</returns> 387 public static object ExecuteSqlGet(string SQLString, string content) 388 { 389 using (SqlConnection connection = new SqlConnection(connectionString)) 390 { 391 SqlCommand cmd = new SqlCommand(SQLString, connection); 392 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText); 393 myParameter.Value = content; 394 cmd.Parameters.Add(myParameter); 395 try 396 { 397 connection.Open(); 398 object obj = cmd.ExecuteScalar(); 399 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 400 { 401 return null; 402 } 403 else 404 { 405 return obj; 406 } 407 } 408 catch (System.Data.SqlClient.SqlException e) 409 { 410 throw e; 411 } 412 finally 413 { 414 cmd.Dispose(); 415 connection.Close(); 416 } 417 } 418 } 419 /// <summary> 420 /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例) 421 /// </summary> 422 /// <param name="strSQL">SQL语句</param> 423 /// <param name="fs">图像字节,数据库的字段类型为image的情况</param> 424 /// <returns>影响的记录数</returns> 425 public static int ExecuteSqlInsertImg(string strSQL, byte[] fs) 426 { 427 using (SqlConnection connection = new SqlConnection(connectionString)) 428 { 429 SqlCommand cmd = new SqlCommand(strSQL, connection); 430 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image); 431 myParameter.Value = fs; 432 cmd.Parameters.Add(myParameter); 433 try 434 { 435 connection.Open(); 436 int rows = cmd.ExecuteNonQuery(); 437 return rows; 438 } 439 catch (System.Data.SqlClient.SqlException e) 440 { 441 throw e; 442 } 443 finally 444 { 445 cmd.Dispose(); 446 connection.Close(); 447 } 448 } 449 } 450 451 /// <summary> 452 /// 执行一条计算查询结果语句,返回查询结果(object)。 453 /// </summary> 454 /// <param name="SQLString">计算查询结果语句</param> 455 /// <returns>查询结果(object)</returns> 456 public static object GetSingle(string SQLString) 457 { 458 using (SqlConnection connection = new SqlConnection(connectionString)) 459 { 460 using (SqlCommand cmd = new SqlCommand(SQLString, connection)) 461 { 462 try 463 { 464 connection.Open(); 465 object obj = cmd.ExecuteScalar(); 466 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 467 { 468 return null; 469 } 470 else 471 { 472 return obj; 473 } 474 } 475 catch (System.Data.SqlClient.SqlException e) 476 { 477 connection.Close(); 478 throw e; 479 } 480 } 481 } 482 } 483 public static object GetSingle(string SQLString, int Times) 484 { 485 using (SqlConnection connection = new SqlConnection(connectionString)) 486 { 487 using (SqlCommand cmd = new SqlCommand(SQLString, connection)) 488 { 489 try 490 { 491 connection.Open(); 492 cmd.CommandTimeout = Times; 493 object obj = cmd.ExecuteScalar(); 494 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 495 { 496 return null; 497 } 498 else 499 { 500 return obj; 501 } 502 } 503 catch (System.Data.SqlClient.SqlException e) 504 { 505 connection.Close(); 506 throw e; 507 } 508 } 509 } 510 } 511 /// <summary> 512 /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) 513 /// </summary> 514 /// <param name="strSQL">查询语句</param> 515 /// <returns>SqlDataReader</returns> 516 public static SqlDataReader ExecuteReader(string strSQL) 517 { 518 SqlConnection connection = new SqlConnection(connectionString); 519 SqlCommand cmd = new SqlCommand(strSQL, connection); 520 try 521 { 522 connection.Open(); 523 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 524 return myReader; 525 } 526 catch (System.Data.SqlClient.SqlException e) 527 { 528 throw e; 529 } 530 531 } 532 /// <summary> 533 /// 执行查询语句,返回DataSet 534 /// </summary> 535 /// <param name="SQLString">查询语句</param> 536 /// <returns>DataSet</returns> 537 public static DataSet Query(string SQLString) 538 { 539 540 using (SqlConnection connection = new SqlConnection(connectionString)) 541 { 542 DataSet ds = new DataSet(); 543 try 544 { 545 connection.Open(); 546 SqlDataAdapter command = new SqlDataAdapter(SQLString, connection); 547 command.Fill(ds, "ds"); 548 } 549 catch (System.Data.SqlClient.SqlException ex) 550 { 551 throw new Exception(ex.Message); 552 } 553 return ds; 554 } 555 556 } 557 public static DataSet Query(string SQLString, int Times) 558 { 559 using (SqlConnection connection = new SqlConnection(connectionString)) 560 { 561 DataSet ds = new DataSet(); 562 try 563 { 564 connection.Open(); 565 SqlDataAdapter command = new SqlDataAdapter(SQLString, connection); 566 command.SelectCommand.CommandTimeout = Times; 567 command.Fill(ds, "ds"); 568 } 569 catch (System.Data.SqlClient.SqlException ex) 570 { 571 throw new Exception(ex.Message); 572 } 573 return ds; 574 } 575 } 576 577 /// <summary> 578 /// 2012-2-21新增重载,执行查询语句,返回DataSet 579 /// </summary> 580 /// <param name="connection">SqlConnection对象</param> 581 /// <param name="trans">SqlTransaction事务</param> 582 /// <param name="SQLString">SQL语句</param> 583 /// <returns>DataSet</returns> 584 public static DataSet Query(SqlConnection connection, SqlTransaction trans, string SQLString) 585 { 586 DataSet ds = new DataSet(); 587 try 588 { 589 SqlDataAdapter command = new SqlDataAdapter(SQLString, connection); 590 command.SelectCommand.Transaction = trans; 591 command.Fill(ds, "ds"); 592 } 593 catch (System.Data.SqlClient.SqlException ex) 594 { 595 throw new Exception(ex.Message); 596 } 597 return ds; 598 599 } 600 601 602 #endregion 603 604 #region 执行带参数的SQL语句 605 606 /// <summary> 607 /// 执行SQL语句,返回影响的记录数 608 /// </summary> 609 /// <param name="SQLString">SQL语句</param> 610 /// <returns>影响的记录数</returns> 611 public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms) 612 { 613 using (SqlConnection connection = new SqlConnection(connectionString)) 614 { 615 using (SqlCommand cmd = new SqlCommand()) 616 { 617 try 618 { 619 PrepareCommand(cmd, connection, null, SQLString, cmdParms); 620 int rows = cmd.ExecuteNonQuery(); 621 cmd.Parameters.Clear(); 622 return rows; 623 } 624 catch (System.Data.SqlClient.SqlException e) 625 { 626 throw e; 627 } 628 } 629 } 630 } 631 /// <param name="connection">SqlConnection对象</param> 632 /// <param name="trans">SqlTransaction对象</param> 633 /// <param name="SQLString">SQL语句</param> 634 /// <returns>影响的记录数</returns> 635 public static int ExecuteSql(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms) 636 { 637 using (SqlCommand cmd = new SqlCommand()) 638 { 639 try 640 { 641 PrepareCommand(cmd, connection, trans, SQLString, cmdParms); 642 int rows = cmd.ExecuteNonQuery(); 643 cmd.Parameters.Clear(); 644 return rows; 645 } 646 catch (System.Data.SqlClient.SqlException e) 647 { 648 //trans.Rollback(); 649 throw e; 650 } 651 } 652 } 653 654 /// <summary> 655 /// 执行多条SQL语句,实现数据库事务。 656 /// </summary> 657 /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param> 658 public static void ExecuteSqlTran(Hashtable SQLStringList) 659 { 660 using (SqlConnection conn = new SqlConnection(connectionString)) 661 { 662 conn.Open(); 663 using (SqlTransaction trans = conn.BeginTransaction()) 664 { 665 SqlCommand cmd = new SqlCommand(); 666 try 667 { 668 //循环 669 foreach (DictionaryEntry myDE in SQLStringList) 670 { 671 string cmdText = myDE.Key.ToString(); 672 SqlParameter[] cmdParms = (SqlParameter[])myDE.Value; 673 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 674 int val = cmd.ExecuteNonQuery(); 675 cmd.Parameters.Clear(); 676 } 677 trans.Commit(); 678 } 679 catch 680 { 681 trans.Rollback(); 682 throw; 683 } 684 } 685 } 686 } 687 /// <summary> 688 /// 执行多条SQL语句,实现数据库事务。 689 /// </summary> 690 /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param> 691 public static int ExecuteSqlTran(System.Collections.Generic.List<CommandInfo> cmdList) 692 { 693 using (SqlConnection conn = new SqlConnection(connectionString)) 694 { 695 conn.Open(); 696 using (SqlTransaction trans = conn.BeginTransaction()) 697 { 698 SqlCommand cmd = new SqlCommand(); 699 try 700 { 701 int count = 0; 702 //循环 703 foreach (CommandInfo myDE in cmdList) 704 { 705 string cmdText = myDE.CommandText; 706 SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters; 707 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 708 709 if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine) 710 { 711 if (myDE.CommandText.ToLower().IndexOf("count(") == -1) 712 { 713 trans.Rollback(); 714 return 0; 715 } 716 717 object obj = cmd.ExecuteScalar(); 718 bool isHave = false; 719 if (obj == null && obj == DBNull.Value) 720 { 721 isHave = false; 722 } 723 isHave = Convert.ToInt32(obj) > 0; 724 725 if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave) 726 { 727 trans.Rollback(); 728 return 0; 729 } 730 if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave) 731 { 732 trans.Rollback(); 733 return 0; 734 } 735 continue; 736 } 737 int val = cmd.ExecuteNonQuery(); 738 count += val; 739 if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0) 740 { 741 trans.Rollback(); 742 return 0; 743 } 744 cmd.Parameters.Clear(); 745 } 746 trans.Commit(); 747 return count; 748 } 749 catch 750 { 751 trans.Rollback(); 752 throw; 753 } 754 } 755 } 756 } 757 /// <summary> 758 /// 执行多条SQL语句,实现数据库事务。 759 /// </summary> 760 /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param> 761 public static void ExecuteSqlTranWithIndentity(System.Collections.Generic.List<CommandInfo> SQLStringList) 762 { 763 using (SqlConnection conn = new SqlConnection(connectionString)) 764 { 765 conn.Open(); 766 using (SqlTransaction trans = conn.BeginTransaction()) 767 { 768 SqlCommand cmd = new SqlCommand(); 769 try 770 { 771 int indentity = 0; 772 //循环 773 foreach (CommandInfo myDE in SQLStringList) 774 { 775 string cmdText = myDE.CommandText; 776 SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters; 777 foreach (SqlParameter q in cmdParms) 778 { 779 if (q.Direction == ParameterDirection.InputOutput) 780 { 781 q.Value = indentity; 782 } 783 } 784 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 785 int val = cmd.ExecuteNonQuery(); 786 foreach (SqlParameter q in cmdParms) 787 { 788 if (q.Direction == ParameterDirection.Output) 789 { 790 indentity = Convert.ToInt32(q.Value); 791 } 792 } 793 cmd.Parameters.Clear(); 794 } 795 trans.Commit(); 796 } 797 catch 798 { 799 trans.Rollback(); 800 throw; 801 } 802 } 803 } 804 } 805 /// <summary> 806 /// 执行多条SQL语句,实现数据库事务。 807 /// </summary> 808 /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param> 809 public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList) 810 { 811 using (SqlConnection conn = new SqlConnection(connectionString)) 812 { 813 conn.Open(); 814 using (SqlTransaction trans = conn.BeginTransaction()) 815 { 816 SqlCommand cmd = new SqlCommand(); 817 try 818 { 819 int indentity = 0; 820 //循环 821 foreach (DictionaryEntry myDE in SQLStringList) 822 { 823 string cmdText = myDE.Key.ToString(); 824 SqlParameter[] cmdParms = (SqlParameter[])myDE.Value; 825 foreach (SqlParameter q in cmdParms) 826 { 827 if (q.Direction == ParameterDirection.InputOutput) 828 { 829 q.Value = indentity; 830 } 831 } 832 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 833 int val = cmd.ExecuteNonQuery(); 834 foreach (SqlParameter q in cmdParms) 835 { 836 if (q.Direction == ParameterDirection.Output) 837 { 838 indentity = Convert.ToInt32(q.Value); 839 } 840 } 841 cmd.Parameters.Clear(); 842 } 843 trans.Commit(); 844 } 845 catch 846 { 847 trans.Rollback(); 848 throw; 849 } 850 } 851 } 852 } 853 /// <summary> 854 /// 执行一条计算查询结果语句,返回查询结果(object)。 855 /// </summary> 856 /// <param name="SQLString">计算查询结果语句</param> 857 /// <returns>查询结果(object)</returns> 858 public static object GetSingle(string SQLString, params SqlParameter[] cmdParms) 859 { 860 using (SqlConnection connection = new SqlConnection(connectionString)) 861 { 862 using (SqlCommand cmd = new SqlCommand()) 863 { 864 try 865 { 866 PrepareCommand(cmd, connection, null, SQLString, cmdParms); 867 object obj = cmd.ExecuteScalar(); 868 cmd.Parameters.Clear(); 869 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 870 { 871 return null; 872 } 873 else 874 { 875 return obj; 876 } 877 } 878 catch (System.Data.SqlClient.SqlException e) 879 { 880 throw e; 881 } 882 } 883 } 884 } 885 /// <param name="connection">SqlConnection对象</param> 886 /// <param name="trans">SqlTransaction事务</param> 887 /// <param name="SQLString">计算查询结果语句</param> 888 /// <returns>查询结果(object)</returns> 889 public static object GetSingle(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms) 890 { 891 using (SqlCommand cmd = new SqlCommand()) 892 { 893 try 894 { 895 PrepareCommand(cmd, connection, trans, SQLString, cmdParms); 896 object obj = cmd.ExecuteScalar(); 897 cmd.Parameters.Clear(); 898 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 899 { 900 return null; 901 } 902 else 903 { 904 return obj; 905 } 906 } 907 catch (System.Data.SqlClient.SqlException e) 908 { 909 trans.Rollback(); 910 throw e; 911 } 912 } 913 } 914 915 /// <summary> 916 /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) 917 /// </summary> 918 /// <param name="strSQL">查询语句</param> 919 /// <returns>SqlDataReader</returns> 920 public static SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms) 921 { 922 SqlConnection connection = new SqlConnection(connectionString); 923 SqlCommand cmd = new SqlCommand(); 924 try 925 { 926 PrepareCommand(cmd, connection, null, SQLString, cmdParms); 927 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 928 cmd.Parameters.Clear(); 929 return myReader; 930 } 931 catch (System.Data.SqlClient.SqlException e) 932 { 933 throw e; 934 } 935 // finally 936 // { 937 // cmd.Dispose(); 938 // connection.Close(); 939 // } 940 941 } 942 943 /// <summary> 944 /// 执行查询语句,返回DataSet 945 /// </summary> 946 /// <param name="SQLString">查询语句</param> 947 /// <returns>DataSet</returns> 948 public static DataSet Query(string SQLString, params SqlParameter[] cmdParms) 949 { 950 using (SqlConnection connection = new SqlConnection(connectionString)) 951 { 952 SqlCommand cmd = new SqlCommand(); 953 PrepareCommand(cmd, connection, null, SQLString, cmdParms); 954 using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 955 { 956 DataSet ds = new DataSet(); 957 try 958 { 959 da.Fill(ds, "ds"); 960 cmd.Parameters.Clear(); 961 } 962 catch (System.Data.SqlClient.SqlException ex) 963 { 964 throw new Exception(ex.Message); 965 } 966 return ds; 967 } 968 } 969 } 970 971 /// <summary> 972 /// 2012-2-21新增重载,执行查询语句,返回DataSet 973 /// </summary> 974 /// <param name="connection">SqlConnection对象</param> 975 /// <param name="trans">SqlTransaction事务</param> 976 /// <param name="SQLString">查询语句</param> 977 /// <returns>DataSet</returns> 978 public static DataSet Query(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms) 979 { 980 SqlCommand cmd = new SqlCommand(); 981 PrepareCommand(cmd, connection, trans, SQLString, cmdParms); 982 using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 983 { 984 DataSet ds = new DataSet(); 985 try 986 { 987 da.Fill(ds, "ds"); 988 cmd.Parameters.Clear(); 989 } 990 catch (System.Data.SqlClient.SqlException ex) 991 { 992 trans.Rollback(); 993 throw new Exception(ex.Message); 994 } 995 return ds; 996 } 997 } 998 999 1000 private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms) 1001 { 1002 if (conn.State != ConnectionState.Open) 1003 conn.Open(); 1004 cmd.Connection = conn; 1005 cmd.CommandText = cmdText; 1006 if (trans != null) 1007 cmd.Transaction = trans; 1008 cmd.CommandType = CommandType.Text;//cmdType; 1009 if (cmdParms != null) 1010 { 1011 1012 1013 foreach (SqlParameter parameter in cmdParms) 1014 { 1015 if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && 1016 (parameter.Value == null)) 1017 { 1018 parameter.Value = DBNull.Value; 1019 } 1020 cmd.Parameters.Add(parameter); 1021 } 1022 } 1023 } 1024 1025 #endregion 1026 1027 #region 存储过程操作 1028 1029 /// <summary> 1030 /// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) 1031 /// </summary> 1032 /// <param name="storedProcName">存储过程名</param> 1033 /// <param name="parameters">存储过程参数</param> 1034 /// <returns>SqlDataReader</returns> 1035 public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters) 1036 { 1037 SqlConnection connection = new SqlConnection(connectionString); 1038 SqlDataReader returnReader; 1039 connection.Open(); 1040 SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); 1041 command.CommandType = CommandType.StoredProcedure; 1042 returnReader = command.ExecuteReader(CommandBehavior.CloseConnection); 1043 return returnReader; 1044 1045 } 1046 1047 1048 /// <summary> 1049 /// 执行存储过程 1050 /// </summary> 1051 /// <param name="storedProcName">存储过程名</param> 1052 /// <param name="parameters">存储过程参数</param> 1053 /// <param name="tableName">DataSet结果中的表名</param> 1054 /// <returns>DataSet</returns> 1055 public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName) 1056 { 1057 using (SqlConnection connection = new SqlConnection(connectionString)) 1058 { 1059 DataSet dataSet = new DataSet(); 1060 connection.Open(); 1061 SqlDataAdapter sqlDA = new SqlDataAdapter(); 1062 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); 1063 sqlDA.Fill(dataSet, tableName); 1064 connection.Close(); 1065 return dataSet; 1066 } 1067 } 1068 public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times) 1069 { 1070 using (SqlConnection connection = new SqlConnection(connectionString)) 1071 { 1072 DataSet dataSet = new DataSet(); 1073 connection.Open(); 1074 SqlDataAdapter sqlDA = new SqlDataAdapter(); 1075 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); 1076 sqlDA.SelectCommand.CommandTimeout = Times; 1077 sqlDA.Fill(dataSet, tableName); 1078 connection.Close(); 1079 return dataSet; 1080 } 1081 } 1082 1083 1084 /// <summary> 1085 /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) 1086 /// </summary> 1087 /// <param name="connection">数据库连接</param> 1088 /// <param name="storedProcName">存储过程名</param> 1089 /// <param name="parameters">存储过程参数</param> 1090 /// <returns>SqlCommand</returns> 1091 private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) 1092 { 1093 SqlCommand command = new SqlCommand(storedProcName, connection); 1094 command.CommandType = CommandType.StoredProcedure; 1095 foreach (SqlParameter parameter in parameters) 1096 { 1097 if (parameter != null) 1098 { 1099 // 检查未分配值的输出参数,将其分配以DBNull.Value. 1100 if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && 1101 (parameter.Value == null)) 1102 { 1103 parameter.Value = DBNull.Value; 1104 } 1105 command.Parameters.Add(parameter); 1106 } 1107 } 1108 1109 return command; 1110 } 1111 1112 /// <summary> 1113 /// 执行存储过程,返回影响的行数 1114 /// </summary> 1115 /// <param name="storedProcName">存储过程名</param> 1116 /// <param name="parameters">存储过程参数</param> 1117 /// <param name="rowsAffected">影响的行数</param> 1118 /// <returns></returns> 1119 public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected) 1120 { 1121 using (SqlConnection connection = new SqlConnection(connectionString)) 1122 { 1123 int result; 1124 connection.Open(); 1125 SqlCommand command = BuildIntCommand(connection, storedProcName, parameters); 1126 rowsAffected = command.ExecuteNonQuery(); 1127 result = (int)command.Parameters["ReturnValue"].Value; 1128 //Connection.Close(); 1129 return result; 1130 } 1131 } 1132 1133 /// <summary> 1134 /// 创建 SqlCommand 对象实例(用来返回一个整数值) 1135 /// </summary> 1136 /// <param name="storedProcName">存储过程名</param> 1137 /// <param name="parameters">存储过程参数</param> 1138 /// <returns>SqlCommand 对象实例</returns> 1139 private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) 1140 { 1141 SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); 1142 command.Parameters.Add(new SqlParameter("ReturnValue", 1143 SqlDbType.Int, 4, ParameterDirection.ReturnValue, 1144 false, 0, 0, string.Empty, DataRowVersion.Default, null)); 1145 return command; 1146 } 1147 #endregion 1148 1149 } 1150 }