C# 连接SQL数据库、常用的连接字符串讲解、常用的数据库操作方法

来源:互联网 发布:好看的战争小说 知乎 编辑:程序博客网 时间:2024/06/05 08:43
  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4. using System.Data.SqlClient;   
  5. using System.Data;   
  6. namespace My_Connection   
  7. {   
  8.     class DbConn   
  9.     {   
  10.         private const string ConnString = "server=localhost;integrated security=sspi;database=pubs;";   
  11.         //---------------------常用的连接字符串参数-------------------------------------------------   
  12.         //server=locahost或 . 登录服务器地址这里是本地   
  13.         //Data Source   
  14.         //Address   
  15.         //Addr   
  16.         //Network Address   
  17.         //integrated security=sspi或true 以Windows当前身份登录   
  18.         //uid=sa; 登录用户名:sa   
  19.         //pwd=sa;   登录密码:sa   
  20.         //Connect Timeout=15 //设置连接等待时间,以秒为单位   
  21.         //Trusted_Connection=True 设置信任连接   
  22.         //Asynchronous Processing=true 设置异步访问数据库,默认关闭   
  23.         //MultipleActiveResultSets=True 在单个连接上得到和管理多个、仅向前引用和只读的结果集(ADO.NET2.0,SQL 2005)   
  24.         //database=pubs 或 Initial Catalog=pubs 指定数据库:pubs   
  25.         //Max Pool Size 最大连接数   
  26.         //Min Pool Size 最小连接数          
  27.         //Pooling 当设置为true时,SQL连接将从连接池获得,如果没有则新建并添加到连接池中,默认是true.false则不设连接池   
  28.         //Connection Lifetime 在连接池中应用,指定一个连接处于close后的生存时间大于指定时间并属于最小连接数以外的将自动消毁           
  29.         //Application Name 应用程序名称或者当没有提供应用程序时为.Net SqlClient数据提供者   
  30.         //Connection Reset true 当连接从连接池移走时决定是否重置数据库连接.当设置为 false 时用于避免获得连接时的额外服务器往复代价   
  31.         //Enlist true 为真时,连接池自动列出创建线程的当前事务上下文中的连接   
  32.         //Workstation ID 指定工作组的名称   
  33.         //Packet Size= 就是设置网络数据包的大小值,默认为8192   
  34.         //Network Library 设置网络连接协议   
  35.   
  36.         //当通过SQLOLEDB提供者进行连接时使用以下语法:   
  37.         //Network Library=dbmssocn   
  38.         //但通过MSDASQL提供者进行连接时使用以下语法:   
  39.         //Network=dbmssocn    
  40.   
  41.         //名称           网络协议库   
  42.         //dbnmpntw Win32 Named Pipes   
  43.         //dbmssocn Win32 Winsock TCP/IP   
  44.         //dbmsspxn Win32 SPX/IPX   
  45.         //dbmsvinn Win32 Banyan Vines   
  46.         //dbmsrpcn Win32 Multi-Protocol (Windows RPC)   
  47.         //------------------------连接字符串示例  -----------------------------------------------------------------------------   
  48.         //通过IP地址连接,必需确保SQL服务器开启1433端口和检查SQL网络连接启用TCP/IP协议   
  49.         //Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;    
  50.         //默认情况下, SQL服务器的微软.NET框架数据提供者设置网络包大小对8192个字节.   
  51.         //然而这不一定是最好的,你可以根据你觉的合适的包大小设置包的大小   
  52.         //Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;Packet Size=4096;    
  53.         //-----------------------------------------------------------------------------------------------   
  54.         //因为考虑到实现复杂业务逻辑时,需要同进使用GetDataReader、GetDataAdapter、GetTransaction等   
  55.         //连接那里会变得麻烦,所以区分定义三种方式的连接对象   
  56.         private SqlConnection SqlDrConn = new SqlConnection(ConnString);   
  57.         private SqlConnection SqlDaConn = new SqlConnection(ConnString);   
  58.         private SqlConnection SqlTrConn = new SqlConnection(ConnString);   
  59.   
  60.         public DataTable GetDataReader(string StrSql)//数据查询   
  61.         {   
  62.             //当连接处于打开状态时关闭,然后再打开,避免有时候数据不能及时更新   
  63.             if (SqlDrConn.State == ConnectionState.Open)   
  64.             {   
  65.                 SqlDrConn.Close();                   
  66.             }   
  67.             try  
  68.             {   
  69.                 SqlDrConn.Open();   
  70.                 SqlCommand SqlCmd = new SqlCommand(StrSql, SqlDrConn);   
  71.                 SqlDataReader SqlDr = SqlCmd.ExecuteReader();   
  72.                 if (SqlDr.HasRows)   
  73.                 {   
  74.                     DataTable dt = new DataTable();   
  75.                     //---------------Method 1-------------------   
  76.                     //for (int i = 0; i < SqlDr.FieldCount; i++)   
  77.                     //{   
  78.                     //    dt.Columns.Add(SqlDr.GetName(i), SqlDr.GetFieldType(i));   
  79.                     //}   
  80.                     //while (SqlDr.Read())   
  81.                     //{   
  82.                     //    DataRow dr= dt.NewRow();   
  83.                     //    for (int i = 0; i < SqlDr.FieldCount; i++)   
  84.                     //    {   
  85.                     //        dr[i] = SqlDr[i];                               
  86.                     //    }   
  87.                     //    dt.Rows.Add(dr);                           
  88.                     //}       
  89.                     //---------------Method 2-------------------   
  90.                     //更为简单   
  91.                     dt.Load(SqlDr);   
  92.                     //关闭对象和连接   
  93.                     SqlDr.Close();   
  94.                     SqlDrConn.Close();   
  95.                     return dt;   
  96.                 }   
  97.                 return null;   
  98.             }   
  99.             catch (Exception ex)   
  100.             {   
  101.                 System.Windows.Forms.MessageBox.Show(ex.Message);             
  102.                 return null;   
  103.             }   
  104.             finally  
  105.             {           
  106.                 SqlDrConn.Close();   
  107.             }   
  108.         }   
  109.   
  110.         public SqlDataAdapter GetDataAdapter(string StrSql)//数据增删修查   
  111.         {   
  112.             if (SqlDaConn.State == ConnectionState.Open)   
  113.             {   
  114.                 SqlDaConn.Close();   
  115.             }   
  116.             try  
  117.             {   
  118.                 SqlDaConn.Open();   
  119.                 SqlDataAdapter SqlDa = new SqlDataAdapter(StrSql, SqlDaConn);   
  120.                 //提供自动生成单表命令的一种方式   
  121.                 SqlCommandBuilder SqlCb = new SqlCommandBuilder(SqlDa);   
  122.                 return SqlDa;   
  123.             }   
  124.             catch (Exception ex)   
  125.             {   
  126.                 System.Windows.Forms.MessageBox.Show(ex.Message);   
  127.                 return null;   
  128.             }   
  129.             finally  
  130.             {                   
  131.                 SqlDaConn.Close();   
  132.             }   
  133.         }   
  134.   
  135.         //这里使用了ArrayList数组来存放SQL语句集   
  136.         public bool GetTransaction(System.Collections.ArrayList StrSqlList)//实现事务   
  137.         {   
  138.             if (SqlTrConn.State == ConnectionState.Open)   
  139.             {   
  140.                 SqlTrConn.Close();   
  141.             }   
  142.             SqlTransaction SqlTr = null;   
  143.             try  
  144.             {   
  145.                 SqlTrConn.Open();   
  146.                 SqlTr = SqlTrConn.BeginTransaction();   
  147.                 SqlCommand SqlCmd = new SqlCommand();   
  148.                 SqlCmd.Connection = SqlTrConn;   
  149.                 SqlCmd.Transaction = SqlTr;               
  150.                 //加载数组里的SQL语句   
  151.                 for (int i = 0; i < StrSqlList.Count; i++)   
  152.                 {   
  153.                     SqlCmd.CommandText = StrSqlList[i].ToString();   
  154.                     SqlCmd.ExecuteNonQuery();   
  155.                 }   
  156.                 //提交所有事务   
  157.                 SqlTr.Commit();                   
  158.                 return true;   
  159.             }   
  160.             catch (Exception ex)   
  161.             {   
  162.                 //一但出错,回滚所有事务,还原状态   
  163.                 if(SqlTr!=null) SqlTr.Rollback();                         
  164.                 System.Windows.Forms.MessageBox.Show(ex.Message);   
  165.                 return false;   
  166.             }                          
  167.             finally  
  168.             {                
  169.                 SqlTrConn.Close();   
  170.             }   
  171.         }   
  172.     }   
  173. }   
  174. //有什么问题可以联系我,下回将献"VS.net C# 连接池实现与应用"   
  175. //Q Q:105012823   
  176. //Email:yangweik-srx@126.com  
原创粉丝点击