数据库连接

1. 代码
  1  public class SqlHelper
  2     {
  3         private static string connStr = GetConnStr();
  4 
  5         /// <summary>
  6         /// 连接Web.config中配置的数据库连接串
  7         /// </summary>
  8         /// <returns>返回连接的字符串</returns>
  9         private static string GetConnStr()
 10         {
 11             return ConfigurationManager.ConnectionStrings["Test"].ConnectionString;
 12         }
 13 
 14         /// <summary>
 15         /// 执行查询操作(sql语句有参数)
 16         /// </summary>
 17         /// <param name="sqlCommand">查询语句</param>
 18         /// <param name="param">查询参数</param>
 19         /// <returns>返回查询得到的DataTable</returns>
 20         public static DataTable GetDataTableBySqlWithParam(string sqlCommand, SqlParameter[] param)
 21         {
 22             DataTable dtSelected = new DataTable();
 23             using (SqlConnection conn = new SqlConnection(connStr))
 24             {
 25                 using (SqlCommand comm = new SqlCommand(sqlCommand, conn))
 26                 {
 27                     comm.CommandTimeout = 180;
 28                     try
 29                     {
 30                         comm.Parameters.AddRange(param);
 31                         conn.Open();
 32                         using (SqlDataAdapter da = new SqlDataAdapter(comm))
 33                         {
 34                             da.SelectCommand.CommandTimeout = 180;
 35                             da.Fill(dtSelected);
 36                         }
 37                         //return dtSelected;
 38                     }
 39                     catch (Exception ex)
 40                     {
 41                         //可以将ex异常信息写到日志文件中,便于排查错误
 42                     }
 43                     finally
 44                     {
 45                         conn.Close();
 46                     }
 47                 }
 48             }
 49             return dtSelected;
 50         }
 51 
 52         /// <summary>
 53         /// 执行查询操作(sql语句无参数)
 54         /// </summary>
 55         /// <param name="sqlCommand">查询语句</param>
 56         /// <param name="param">查询参数</param>
 57         /// <returns>返回查询得到的DataTable</returns>
 58         public static DataTable GetDataTableBySqlNoParam(string sqlCommand)
 59         {
 60             DataTable dtSelected = new DataTable();
 61             using (SqlConnection conn = new SqlConnection(connStr))
 62             {
 63                 using (SqlCommand comm = new SqlCommand(sqlCommand, conn))
 64                 {
 65                     comm.CommandTimeout = 180;
 66                     try
 67                     {
 68                         conn.Open();
 69                         using (SqlDataAdapter da = new SqlDataAdapter(comm))
 70                         {
 71                             da.SelectCommand.CommandTimeout = 180;
 72                             da.Fill(dtSelected);
 73                         }
 74                         //return dtSelected;
 75                     }
 76                     catch (Exception ex)
 77                     {
 78                         //可以将ex异常信息写到日志文件中,便于排查错误
 79                     }
 80                     finally
 81                     {
 82                         conn.Close();
 83                     }
 84                 }
 85             }
 86             return dtSelected;
 87         }
 88 
 89         /// <summary>
 90         /// 执行插入,删除,更新操作(sql语句有参数)
 91         /// </summary>
 92         /// <param name="sqlCommand"></param>
 93         /// <param name="param"></param>
 94         /// <returns></returns>
 95         public static int ExecBySqlWithParam(string sqlCommand, SqlParameter[] param)
 96         {
 97             int effectLine = 0;
 98             using (SqlConnection conn = new SqlConnection(connStr))
 99             {
100                 using (SqlCommand comm = new SqlCommand(sqlCommand, conn)) 
101                 {
102                     comm.CommandTimeout = 180;
103                     try
104                     {
105                         comm.Parameters.AddRange(param);
106                         conn.Open();
107                         effectLine = comm.ExecuteNonQuery();
108                     }
109                     catch (Exception ex)
110                     {
111                         effectLine = -1;
112                     }
113                     finally
114                     {
115                         conn.Close();
116                     }
117                 }
118             }
119             return effectLine;
120         }
121 
122         /// <summary>
123         /// 执行插入,删除,更新操作(sql语句无参数)
124         /// </summary>
125         /// <param name="sqlCommand"></param>
126         /// <param name="param"></param>
127         /// <returns></returns>
128         public static int ExecBySqlNoParam(string sqlCommand)
129         {
130             int effectLine = 0;
131             using (SqlConnection conn = new SqlConnection(connStr))
132             {
133                 using (SqlCommand comm = new SqlCommand(sqlCommand, conn))
134                 {
135                     comm.CommandTimeout = 180;
136                     try
137                     {
138                         conn.Open();
139                         effectLine = comm.ExecuteNonQuery();
140                         return effectLine;
141                     }
142                     catch (Exception ex)
143                     {
144                         effectLine = -1;
145                         return effectLine;
146                     }
147                     finally
148                     {
149                         effectLine = 3;
150                         conn.Close();
151                     }
152                 }
153             }
154             //return effectLine;
155         }
156     }
View Code

2. 代码分析
  (1)通常数据库连接操作属于Web开发中的常用操作,故封装成SqlHelper类
  (2)为什么要将操作分为有sql参数和无sql参数?
       通常sql查询语句要么带参数,要么不带参数,如下面所示:
       select * from Student;
       select * from Student where Sno = @Sno;
       故将Sql操作分为两种类型 --〉产生的问题:代码冗余
       --〉解决办法:添加第三个参数,用于判定是否是带参数的查询语句
       --〉产生新的问题:sql操作时,增加判定,从而增加操作时间
       综上:权衡考虑采用上面的代码,不采用参数判定法。
3. 代码使用
  (1)Web.config数据库配置
      (a)本地配置

<connectionStrings>
  <add name ="Test" connectionString="Data Source=(local)MYDATABASE;Initial Catalog=Test;User ID=sa;password=*****"/>
</connectionStrings>

     (b)远程服务器配置

<connectionStrings>  
  <add name ="Test" connectionString="Data Source=192.169.3.4; Initial Catalog=Test; User ID=sa; password=*****"/> </connectionStrings>

  (2)SqlHelper类的使用
      (a)无sql参数
           string sqlCmd = "select * from Student";
           DataTable dt = SqlHelper.GetDataTableBySqlNoParam(sqlCmd);
      (b)有sql参数
           string sqlCmd = "select * from Student where Sno=@Sno";
           string Sno = "030340814";
           //亦可以添加多个参数,中间用逗号隔开
           SqlParameter[] para = new SqlParameter[]
           {
               new SqlParameter("@Sno",Sno)
           };
           DataTable dt = SqlHelper.GetDataTableBySqlWithParam(sqlCmd, para);
4. 写代码遇到的问题

  (1)try,catch,finally的问题
       (a)在finally中不能return某个值,只能在try块,catch块或者程序的最后return某个值
       (b)如果在同时在try块和catch块中返回某个值,在程序的最后不返回该值,但是在finally块中修改 
            了该返回值。其实返回的仍然是try块或者catch块中的值,因为当运行到try块或者catch块中的 
            return值时,先将它们存储到某个临时变量,到程序最后再取回并return


原文地址:https://www.cnblogs.com/seanbrucexxl/p/3586790.html