SqlHelper帮助类

SqlHelper帮助类

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