C#写一套最全的SQL server帮助类(包括增删改查)

打印 上一主题 下一主题

主题 934|帖子 934|积分 2802

我定义了一系列静态方法,用于执行SQL Server数据库的增删改查等操作。
其中:
ExecuteNonQuery方法用于执行指定的SQL语句并返回受影响的行数;
ExecuteScalar方法用于执行指定的SQL语句并返回查询结果的第一行第一列;
ExecuteDataTable方法用于执行指定的SQL语句并返回一个数据表;
ExecuteReader方法用于执行指定的SQL语句并返回一个DataReader对象。
Insert方法用于向指定的表中插入一条记录,并返回新记录的ID值(如果有自增字段);
Update方法用于更新指定表中满足条件的记录,并返回受影响的行数;
Delete方法用于删除指定表中满足条件的记录,并返回受影响的行数。
在这些方法中,我们使用了ADO.NET的相关技术,包括SqlConnection、SqlCommand、SqlDataAdapter、DataSet等类,以及SqlParameter对象来
一、下面是一套SQL Server的帮助类,包括增删改查等操作,并且带有详细注释。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. public class SqlserverHelper
  6. {
  7.     private static string connectionString = "Data Source=服务器名称;Initial Catalog=数据库名称;User ID=用户名;Password=密码";  // 数据库连接字符串
  8.     /// <summary>
  9.     /// 执行指定的SQL语句并返回受影响的行数
  10.     /// </summary>
  11.     /// <param name="sql">要执行的SQL语句</param>
  12.     /// <returns>受影响的行数</returns>
  13.     public static int ExecuteNonQuery(string sql)
  14.     {
  15.         using (SqlConnection conn = new SqlConnection(connectionString))
  16.         {
  17.             conn.Open();          // 打开数据库连接
  18.             SqlCommand cmd = new SqlCommand(sql, conn);
  19.             int count = cmd.ExecuteNonQuery();   // 执行SQL语句并返回受影响的行数
  20.             return count;         // 返回受影响的行数
  21.         }
  22.     }
  23.     /// <summary>
  24.     /// 执行指定的SQL语句并返回查询结果的第一行第一列
  25.     /// </summary>
  26.     /// <param name="sql">要执行的SQL语句</param>
  27.     /// <returns>查询结果的第一行第一列</returns>
  28.     public static object ExecuteScalar(string sql)
  29.     {
  30.         using (SqlConnection conn = new SqlConnection(connectionString))
  31.         {
  32.             conn.Open();          // 打开数据库连接
  33.             SqlCommand cmd = new SqlCommand(sql, conn);
  34.             object obj = cmd.ExecuteScalar();   // 执行SQL语句并返回查询结果的第一行第一列
  35.             return obj;           // 返回查询结果的第一行第一列
  36.         }
  37.     }
  38.     /// <summary>
  39.     /// 执行指定的SQL语句并返回一个数据表
  40.     /// </summary>
  41.     /// <param name="sql">要执行的SQL语句</param>
  42.     /// <returns>查询结果的数据表</returns>
  43.     public static DataTable ExecuteDataTable(string sql)
  44.     {
  45.         using (SqlConnection conn = new SqlConnection(connectionString))
  46.         {
  47.             conn.Open();          // 打开数据库连接
  48.             SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
  49.             DataSet ds = new DataSet();
  50.             adapter.Fill(ds);     // 执行SQL语句并将查询结果填充到DataSet对象中
  51.             return ds.Tables[0];  // 返回查询结果的数据表
  52.         }
  53.     }
  54.     /// <summary>
  55.     /// 执行指定的SQL语句并返回一个DataReader对象
  56.     /// </summary>
  57.     /// <param name="sql">要执行的SQL语句</param>
  58.     /// <returns>查询结果的DataReader对象</returns>
  59.     public static SqlDataReader ExecuteReader(string sql)
  60.     {
  61.         SqlConnection conn = new SqlConnection(connectionString);
  62.         conn.Open();              // 打开数据库连接
  63.         SqlCommand cmd = new SqlCommand(sql, conn);
  64.         SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);   // 执行SQL语句并返回DataReader对象
  65.         return reader;            // 返回查询结果的DataReader对象
  66.     }
  67.     /// <summary>
  68.     /// 向指定的表中插入一条记录,并返回新记录的ID值(如果有自增字段)
  69.     /// </summary>
  70.     /// <param name="tableName">要插入记录的表名称</param>
  71.     /// <param name="fields">要插入记录的字段和值的集合</param>
  72.     /// <returns>新记录的ID值(如果有自增字段)</returns>
  73.     public static int Insert(string tableName, Dictionary<string, object> fields)
  74.     {
  75.         string sql = "insert into " + tableName + "(";
  76.         string values = ") values (";
  77.         SqlCommand cmd = new SqlCommand();
  78.         foreach (KeyValuePair<string, object> field in fields)
  79.         {
  80.             sql += "[" + field.Key + "],";
  81.             values += "@" + field.Key + ",";
  82.             cmd.Parameters.AddWithValue("@" + field.Key, field.Value);
  83.         }
  84.         sql = sql.TrimEnd(',') + values.TrimEnd(',') + ")";
  85.         sql += ";select @@identity";    // 如果有自增字段,则返回新记录的ID值
  86.         cmd.Connection = new SqlConnection(connectionString);
  87.         cmd.CommandText = sql;
  88.         cmd.Connection.Open();     // 打开数据库连接
  89.         int newId;
  90.         if (cmd.ExecuteScalar() != DBNull.Value)
  91.         {
  92.             newId = Convert.ToInt32(cmd.ExecuteScalar());
  93.         }
  94.         else
  95.         {
  96.             newId = 0;   // 如果没有自增字段,则返回0
  97.         }
  98.         cmd.Connection.Close();    // 关闭数据库连接
  99.         return newId;              // 返回新记录的ID值
  100.     }
  101.     /// <summary>
  102.     /// 更新指定表中满足条件的记录,并返回受影响的行数
  103.     /// </summary>
  104.     /// <param name="tableName">要更新记录的表名称</param>
  105.     /// <param name="fields">要更新的字段和值的集合</param>
  106.     /// <param name="conditions">更新条件的字段和值的集合</param>
  107.     /// <returns>受影响的行数</returns>
  108.     public static int Update(string tableName, Dictionary<string, object> fields, Dictionary<string, object> conditions)
  109.     {
  110.         string sql = "update " + tableName + " set ";
  111.         SqlCommand cmd = new SqlCommand();
  112.         foreach (KeyValuePair<string, object> field in fields)
  113.         {
  114.             sql += "[" + field.Key + "]=@" + field.Key + ",";
  115.             cmd.Parameters.AddWithValue("@" + field.Key, field.Value);
  116.         }
  117.         sql = sql.TrimEnd(',');
  118.         if (conditions != null && conditions.Count > 0)
  119.         {
  120.             sql += " where ";
  121.             foreach (KeyValuePair<string, object> condition in conditions)
  122.             {
  123.                 sql += "[" + condition.Key + "]=@" + condition.Key + " and ";
  124.                 cmd.Parameters.AddWithValue("@" + condition.Key, condition.Value);
  125.             }
  126.             sql = sql.TrimEnd(' ', 'a', 'n', 'd');
  127.         }
  128.         cmd.Connection = new SqlConnection(connectionString);
  129.         cmd.CommandText = sql;
  130.         cmd.Connection.Open();     // 打开数据库连接
  131.         int count = cmd.ExecuteNonQuery();   // 执行SQL语句并返回受影响的行数
  132.         cmd.Connection.Close();    // 关闭数据库连接
  133.         return count;              // 返回受影响的行数
  134.     }
  135.     /// <summary>
  136.     /// 删除指定表中满足条件的记录,并返回受影响的行数
  137.     /// </summary>
  138.     /// <param name="tableName">要删除记录的表名称</param>
  139.     /// <param name="conditions">删除条件的字段和值的集合</param>
  140.     /// <returns>受影响的行数</returns>
  141.     public static int Delete(string tableName, Dictionary<string, object> conditions)
  142.     {
  143.         string sql = "delete from " + tableName;
  144.         SqlCommand cmd = new SqlCommand();
  145.         if (conditions != null && conditions.Count > 0)
  146.         {
  147.             sql += " where ";
  148.             foreach (KeyValuePair<string, object> condition in conditions)
  149.             {
  150.                 sql += "[" + condition.Key + "]=@" + condition.Key + " and ";
  151.                 cmd.Parameters.AddWithValue("@" + condition.Key, condition.Value);
  152.             }
  153.             sql = sql.TrimEnd(' ', 'a', 'n', 'd');
  154.         }
  155.         cmd.Connection = new SqlConnection(connectionString);
  156.         cmd.CommandText = sql;
  157.         cmd.Connection.Open();     // 打开数据库连接
  158.         int count = cmd.ExecuteNonQuery();   // 执行SQL语句并返回受影响的行数
  159.         cmd.Connection.Close();    // 关闭数据库连接
  160.         return count;              // 返回受影响的行数
  161.     }
  162. }
复制代码
View Code二、每一个方法的调用。
在这个示例中,我首先调用ExecuteNonQuery方法向数据库中插入一条记录,并输出插入的行数;
然后调用ExecuteScalar方法查询了数据库中记录的总数,并输出结果;
接下来,我使用ExecuteDataTable方法查询了符合条件的记录,并通过遍历数据表的方式输出所有记录的信息。
然后使用ExecuteReader方法查询了所有的记录,并通过遍历DataReader对象的方式输出所有记录的信息。
请注意,在使用完DataReader对象后必须调用其Close()方法关闭它。
接着使用Insert方法向数据库中插入了一条记录,并获得了新记录的ID值(如果有自增字段);
还使用Update方法更新了符合条件的记录,并输出了更新的行数;
最后,使用Delete方法删除了符合条件的记录,并输出了删除的行数。
当然,这些示例只是演示了如何使用SqlHelper类中的每一个方法。
在实际应用中,将根据具体的需求来调用它们并处理查询结果。
  1.     static void Main(string[] args)
  2.         {
  3.             // 执行指定的SQL语句并返回受影响的行数
  4.             int count = SqlserverHelper.ExecuteNonQuery("insert into [User](UserName, Password) values('admin', '123456')");
  5.             Console.WriteLine("受影响的行数:" + count);
  6.             // 执行指定的SQL语句并返回查询结果的第一行第一列
  7.             object obj = SqlserverHelper.ExecuteScalar("select count(*) from [User]");
  8.             Console.WriteLine("记录总数:" + obj);
  9.             // 执行指定的SQL语句并返回一个数据表
  10.             DataTable dt = SqlserverHelper.ExecuteDataTable("select * from [User] where UserName='admin'");
  11.             foreach (DataRow row in dt.Rows)
  12.             {
  13.                 Console.WriteLine("用户名:" + row["UserName"] + " 密码:" + row["Password"]);
  14.             }
  15.             // 执行指定的SQL语句并返回一个DataReader对象
  16.             SqlDataReader reader = SqlserverHelper.ExecuteReader("select * from [User]");
  17.             while (reader.Read())
  18.             {
  19.                 Console.WriteLine("用户名:" + reader["UserName"] + " 密码:" + reader["Password"]);
  20.             }
  21.             reader.Close();
  22.             // 向指定的表中插入一条记录,并返回新记录的ID值(如果有自增字段)
  23.             Dictionary<string, object> fields = new Dictionary<string, object>();
  24.             fields.Add("UserName", "test");
  25.             fields.Add("Password", "123456");
  26.             int newId = SqlserverHelper.Insert("User", fields);
  27.             Console.WriteLine("新记录的ID值:" + newId);
  28.             // 更新指定表中满足条件的记录,并返回受影响的行数
  29.             Dictionary<string, object> conditions = new Dictionary<string, object>();
  30.             conditions.Add("UserName", "test");
  31.             Dictionary<string, object> newFields = new Dictionary<string, object>();
  32.             newFields.Add("Password", "654321");
  33.             int updateCount = SqlserverHelper.Update("User", newFields, conditions);
  34.             Console.WriteLine("更新记录的数量:" + updateCount);
  35.             // 删除指定表中满足条件的记录,并返回受影响的行数
  36.             Dictionary<string, object> delConditions = new Dictionary<string, object>();
  37.             delConditions.Add("UserName", "test");
  38.             int delCount = SqlserverHelper.Delete("User", delConditions);
  39.             Console.WriteLine("删除记录的数量:" + delCount);
  40.             Console.ReadKey();
  41.         }
复制代码
View Code 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表