gpt4 book ai didi

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

转载 作者:我是一只小鸟 更新时间:2023-04-21 14:31:51 32 4
gpt4 key购买 nike

介绍说明: 这个帮助类包含了六个主要的方法: ExecuteNonQuery、ExecuteScalar、ExecuteQuery、ExecuteQuery(泛型)、Insert、Update和Delete。 其中,ExecuteNonQuery用于执行不返回结果集的SQL语句; ExecuteScalar用于执行一个查询,并返回结果集中第一行的第一列; ExecuteQuery用于执行一个查询,并返回结果集; ExecuteQuery(泛型)用于执行一个查询,并将结果集映射到一个对象列表; Insert用于向数据库中插入数据; Update用于更新数据库中的数据; Delete用于删除数据库中的数据.

1、以下是一个基于C#的MySQL帮助类的示例代码,可以用于连接数据库、执行SQL语句、读取数据等操作:

                            
                              using
                            
                            
                               System;

                            
                            
                              using
                            
                            
                               System.Collections.Generic;

                            
                            
                              using
                            
                            
                               System.Data;

                            
                            
                              using
                            
                            
                               MySql.Data.MySqlClient;


                            
                            
                              public
                            
                            
                              class
                            
                            
                               MySQLHelper
{
    
                            
                            
                              private
                            
                            
                              string
                            
                            
                               connectionString;

    
                            
                            
                              public
                            
                             MySQLHelper(
                            
                              string
                            
                            
                               connectionString)
    {
        
                            
                            
                              this
                            
                            .connectionString =
                            
                               connectionString;
    }

    
                            
                            
                              //
                            
                            
                               执行不返回结果集的SQL语句
                            
                            
                              public
                            
                            
                              int
                            
                             ExecuteNonQuery(
                            
                              string
                            
                             sql, 
                            
                              params
                            
                            
                               MySqlParameter[] parameters)
    {
        
                            
                            
                              using
                            
                             (MySqlConnection connection = 
                            
                              new
                            
                            
                               MySqlConnection(connectionString))
        {
            
                            
                            
                              using
                            
                             (MySqlCommand command = 
                            
                              new
                            
                            
                               MySqlCommand(sql, connection))
            {
                
                            
                            
                              //
                            
                            
                               添加参数
                            
                            
                                              command.Parameters.AddRange(parameters);
                
                            
                            
                              //
                            
                            
                               打开连接
                            
                            
                                              connection.Open();
                
                            
                            
                              //
                            
                            
                               执行SQL语句并返回影响行数
                            
                            
                              return
                            
                            
                               command.ExecuteNonQuery();
            }
        }
    }

    
                            
                            
                              //
                            
                            
                               执行一个查询,并返回结果集中第一行的第一列
                            
                            
                              public
                            
                            
                              object
                            
                             ExecuteScalar(
                            
                              string
                            
                             sql, 
                            
                              params
                            
                            
                               MySqlParameter[] parameters)
    {
        
                            
                            
                              using
                            
                             (MySqlConnection connection = 
                            
                              new
                            
                            
                               MySqlConnection(connectionString))
        {
            
                            
                            
                              using
                            
                             (MySqlCommand command = 
                            
                              new
                            
                            
                               MySqlCommand(sql, connection))
            {
                
                            
                            
                              //
                            
                            
                               添加参数
                            
                            
                                              command.Parameters.AddRange(parameters);
                
                            
                            
                              //
                            
                            
                               打开连接
                            
                            
                                              connection.Open();
                
                            
                            
                              //
                            
                            
                               执行SQL查询并返回第一行第一列的值
                            
                            
                              return
                            
                            
                               command.ExecuteScalar();
            }
        }
    }

    
                            
                            
                              //
                            
                            
                               执行一个查询,并返回结果集
                            
                            
                              public
                            
                             DataTable ExecuteQuery(
                            
                              string
                            
                             sql, 
                            
                              params
                            
                            
                               MySqlParameter[] parameters)
    {
        
                            
                            
                              using
                            
                             (MySqlConnection connection = 
                            
                              new
                            
                            
                               MySqlConnection(connectionString))
        {
            
                            
                            
                              using
                            
                             (MySqlCommand command = 
                            
                              new
                            
                            
                               MySqlCommand(sql, connection))
            {
                
                            
                            
                              //
                            
                            
                               添加参数
                            
                            
                                              command.Parameters.AddRange(parameters);
                
                            
                            
                              //
                            
                            
                               打开连接
                            
                            
                                              connection.Open();
                
                            
                            
                              //
                            
                            
                               创建DataAdapter和DataTable对象,并填充数据
                            
                            
                              using
                            
                             (MySqlDataAdapter adapter = 
                            
                              new
                            
                            
                               MySqlDataAdapter(command))
                {
                    DataTable dataTable 
                            
                            = 
                            
                              new
                            
                            
                               DataTable();
                    adapter.Fill(dataTable);
                    
                            
                            
                              return
                            
                            
                               dataTable;
                }
            }
        }
    }

    
                            
                            
                              //
                            
                            
                               执行一个查询,并将结果集映射到一个对象列表
                            
                            
                              public
                            
                             List<T> ExecuteQuery<T>(
                            
                              string
                            
                             sql, Func<IDataRecord, T> selector, 
                            
                              params
                            
                            
                               MySqlParameter[] parameters)
    {
        
                            
                            
                              using
                            
                             (MySqlConnection connection = 
                            
                              new
                            
                            
                               MySqlConnection(connectionString))
        {
            
                            
                            
                              using
                            
                             (MySqlCommand command = 
                            
                              new
                            
                            
                               MySqlCommand(sql, connection))
            {
                
                            
                            
                              //
                            
                            
                               添加参数
                            
                            
                                              command.Parameters.AddRange(parameters);
                
                            
                            
                              //
                            
                            
                               打开连接
                            
                            
                                              connection.Open();
                
                            
                            
                              //
                            
                            
                               创建DataReader对象并读取数据,将每行数据映射到对象并添加到列表中
                            
                            
                              using
                            
                             (MySqlDataReader reader =
                            
                               command.ExecuteReader())
                {
                    List
                            
                            <T> list = 
                            
                              new
                            
                             List<T>
                            
                              ();
                    
                            
                            
                              while
                            
                            
                               (reader.Read())
                    {
                        list.Add(selector(reader));
                    }
                    
                            
                            
                              return
                            
                            
                               list;
                }
            }
        }
    }

    
                            
                            
                              //
                            
                            
                               向数据库中插入数据
                            
                            
                              public
                            
                            
                              int
                            
                             Insert(
                            
                              string
                            
                             tableName, Dictionary<
                            
                              string
                            
                            , 
                            
                              object
                            
                            >
                            
                               data)
    {
        
                            
                            
                              string
                            
                            [] columns = 
                            
                              new
                            
                            
                              string
                            
                            
                              [data.Count];
        
                            
                            
                              object
                            
                            [] values = 
                            
                              new
                            
                            
                              object
                            
                            
                              [data.Count];

        
                            
                            
                              int
                            
                             i = 
                            
                              0
                            
                            
                              ;
        
                            
                            
                              foreach
                            
                             (KeyValuePair<
                            
                              string
                            
                            , 
                            
                              object
                            
                            > item 
                            
                              in
                            
                            
                               data)
        {
            
                            
                            
                              //
                            
                            
                               获取列名和值
                            
                            
            columns[i] =
                            
                               item.Key;
            values[i] 
                            
                            =
                            
                               item.Value;
            i
                            
                            ++
                            
                              ;
        }

        
                            
                            
                              string
                            
                             sql = 
                            
                              string
                            
                            .Format(
                            
                              "
                            
                            
                              INSERT INTO {0} ({1}) VALUES ({2})
                            
                            
                              "
                            
                            , tableName, 
                            
                              string
                            
                            .Join(
                            
                              "
                            
                            
                              ,
                            
                            
                              "
                            
                            , columns), 
                            
                              "
                            
                            
                              @
                            
                            
                              "
                            
                             + 
                            
                              string
                            
                            .Join(
                            
                              "
                            
                            
                              ,@
                            
                            
                              "
                            
                            
                              , columns));

        
                            
                            
                              //
                            
                            
                               将Dictionary转换为MySqlParameter数组,并执行SQL语句
                            
                            
                              return
                            
                            
                               ExecuteNonQuery(sql, ToMySqlParameters(data));
    }

    
                            
                            
                              //
                            
                            
                               更新数据库中的数据
                            
                            
                              public
                            
                            
                              int
                            
                             Update(
                            
                              string
                            
                             tableName, Dictionary<
                            
                              string
                            
                            , 
                            
                              object
                            
                            > data, 
                            
                              string
                            
                             whereClause = 
                            
                              ""
                            
                            
                              )
    {
        
                            
                            
                              string
                            
                            [] setValues = 
                            
                              new
                            
                            
                              string
                            
                            
                              [data.Count];
        
                            
                            
                              int
                            
                             i = 
                            
                              0
                            
                            
                              ;
        
                            
                            
                              foreach
                            
                             (KeyValuePair<
                            
                              string
                            
                            , 
                            
                              object
                            
                            > item 
                            
                              in
                            
                            
                               data)
        {
            
                            
                            
                              //
                            
                            
                               获取列名和值
                            
                            
            setValues[i] = 
                            
                              string
                            
                            .Format(
                            
                              "
                            
                            
                              {0}=@{0}
                            
                            
                              "
                            
                            
                              , item.Key);
            i
                            
                            ++
                            
                              ;
        }

        
                            
                            
                              string
                            
                             sql = 
                            
                              string
                            
                            .Format(
                            
                              "
                            
                            
                              UPDATE {0} SET {1}
                            
                            
                              "
                            
                            , tableName, 
                            
                              string
                            
                            .Join(
                            
                              "
                            
                            
                              ,
                            
                            
                              "
                            
                            
                              , setValues));

        
                            
                            
                              if
                            
                             (!
                            
                              string
                            
                            
                              .IsNullOrEmpty(whereClause))
        {
            sql 
                            
                            += 
                            
                              "
                            
                            
                               WHERE 
                            
                            
                              "
                            
                             +
                            
                               whereClause;
        }

        
                            
                            
                              //
                            
                            
                               将Dictionary转换为MySqlParameter数组,并执行SQL语句
                            
                            
                              return
                            
                            
                               ExecuteNonQuery(sql, ToMySqlParameters(data));
    }

    
                            
                            
                              //
                            
                            
                               删除数据库中的数据
                            
                            
                              public
                            
                            
                              int
                            
                             Delete(
                            
                              string
                            
                             tableName, 
                            
                              string
                            
                             whereClause = 
                            
                              ""
                            
                            
                              )
    {
        
                            
                            
                              string
                            
                             sql = 
                            
                              string
                            
                            .Format(
                            
                              "
                            
                            
                              DELETE FROM {0}
                            
                            
                              "
                            
                            
                              , tableName);

        
                            
                            
                              if
                            
                             (!
                            
                              string
                            
                            
                              .IsNullOrEmpty(whereClause))
        {
            sql 
                            
                            += 
                            
                              "
                            
                            
                               WHERE 
                            
                            
                              "
                            
                             +
                            
                               whereClause;
        }

        
                            
                            
                              //
                            
                            
                               执行SQL语句并返回影响
                            
                            
                              return
                            
                            
                               ExecuteNonQuery(sql);
    }
    
                            
                            
                              //
                            
                            
                               将Dictionary转换为MySqlParameter数组
                            
                            
                              private
                            
                             MySqlParameter[] ToMySqlParameters(Dictionary<
                            
                              string
                            
                            , 
                            
                              object
                            
                            >
                            
                               data)
    {
        List
                            
                            <MySqlParameter> parameters = 
                            
                              new
                            
                             List<MySqlParameter>
                            
                              ();

        
                            
                            
                              foreach
                            
                             (KeyValuePair<
                            
                              string
                            
                            , 
                            
                              object
                            
                            > item 
                            
                              in
                            
                            
                               data)
        {
            parameters.Add(
                            
                            
                              new
                            
                             MySqlParameter(
                            
                              "
                            
                            
                              @
                            
                            
                              "
                            
                             +
                            
                               item.Key, item.Value));
        }

        
                            
                            
                              return
                            
                            
                               parameters.ToArray();
    }
}
                            
                          
View Code

2、另外,在使用这个帮助类时,需要先创建一个连接字符串,例如 。

                            
                              string
                            
                             connectionString = 
                            
                              "
                            
                            
                              server=localhost;database=myDatabase;uid=myUsername;password=myPassword;
                            
                            
                              "
                            
                            
                              ;
MySQLHelper mySQLHelper 
                            
                            = 
                            
                              new
                            
                             MySQLHelper(connectionString);
                          
View Code

3、然后就可以使用这个帮助类来访问MySQL数据库了。下面是一些示例代码:

                            
                              //
                            
                            
                               查询所有数据
                            
                            
DataTable dataTable = mySQLHelper.ExecuteQuery(
                            
                              "
                            
                            
                              SELECT * FROM myTable
                            
                            
                              "
                            
                            
                              );

                            
                            
                              foreach
                            
                             (DataRow row 
                            
                              in
                            
                            
                               dataTable.Rows)
{
    Console.WriteLine(row[
                            
                            
                              "
                            
                            
                              column1
                            
                            
                              "
                            
                            
                              ].ToString());
}



                            
                            
                              //
                            
                            
                               查询单个值
                            
                            
                              object
                            
                             value = mySQLHelper.ExecuteScalar(
                            
                              "
                            
                            
                              SELECT COUNT(*) FROM myTable
                            
                            
                              "
                            
                            
                              );
Console.WriteLine(value.ToString());



                            
                            
                              //
                            
                            
                               查询并映射到对象列表
                            
                            
List<MyClass> list = mySQLHelper.ExecuteQuery(
                            
                              "
                            
                            
                              SELECT * FROM myTable
                            
                            
                              "
                            
                            , r => 
                            
                              new
                            
                            
                               MyClass
{
    Column1 
                            
                            = r[
                            
                              "
                            
                            
                              column1
                            
                            
                              "
                            
                            
                              ].ToString(),
    Column2 
                            
                            = 
                            
                              int
                            
                            .Parse(r[
                            
                              "
                            
                            
                              column2
                            
                            
                              "
                            
                            
                              ].ToString())
});



                            
                            
                              //
                            
                            
                               插入数据
                            
                            
Dictionary<
                            
                              string
                            
                            , 
                            
                              object
                            
                            > data = 
                            
                              new
                            
                             Dictionary<
                            
                              string
                            
                            , 
                            
                              object
                            
                            >
                            
                              ();
data.Add(
                            
                            
                              "
                            
                            
                              column1
                            
                            
                              "
                            
                            , 
                            
                              "
                            
                            
                              value1
                            
                            
                              "
                            
                            
                              );
data.Add(
                            
                            
                              "
                            
                            
                              column2
                            
                            
                              "
                            
                            , 
                            
                              123
                            
                            
                              );

                            
                            
                              int
                            
                             result = mySQLHelper.Insert(
                            
                              "
                            
                            
                              myTable
                            
                            
                              "
                            
                            
                              , data);



                            
                            
                              //
                            
                            
                               更新数据
                            
                            
Dictionary<
                            
                              string
                            
                            , 
                            
                              object
                            
                            > data = 
                            
                              new
                            
                             Dictionary<
                            
                              string
                            
                            , 
                            
                              object
                            
                            >
                            
                              ();
data.Add(
                            
                            
                              "
                            
                            
                              column1
                            
                            
                              "
                            
                            , 
                            
                              "
                            
                            
                              value2
                            
                            
                              "
                            
                            
                              );
data.Add(
                            
                            
                              "
                            
                            
                              column2
                            
                            
                              "
                            
                            , 
                            
                              456
                            
                            
                              );

                            
                            
                              int
                            
                             result = mySQLHelper.Update(
                            
                              "
                            
                            
                              myTable
                            
                            
                              "
                            
                            , data, 
                            
                              "
                            
                            
                              id=1
                            
                            
                              "
                            
                            
                              );



                            
                            
                              //
                            
                            
                               删除数据
                            
                            
                              int
                            
                             result = mySQLHelper.Delete(
                            
                              "
                            
                            
                              myTable
                            
                            
                              "
                            
                            , 
                            
                              "
                            
                            
                              id=1
                            
                            
                              "
                            
                            );
                          
View Code

               注:这些示例代码展示了如何使用这个帮助类来执行常见的MySQL操作,例如查询、插入、更新和删除数据。请注意,在执行SQL语句时,要避免SQL注入攻击,可以使用参数化查询来确保安全.

4、就上述SQL注入攻击,防范例子:

                            
                              //
                            
                            
                              是的,使用参数化查询是避免SQL注入攻击的重要方法之一。C#中可以使用MySqlParameter类来创建参数化查询,下面简单介绍一下如何使用MySqlParameter类。

                            
                            
                              //
                            
                            
                              首先,看一个普通的SQL语句:
                            
                            
                              string
                            
                             sql = 
                            
                              "
                            
                            
                              SELECT * FROM Users WHERE name='
                            
                            
                              "
                            
                             + userName + 
                            
                              "
                            
                            
                              ' AND password='
                            
                            
                              "
                            
                             + password + 
                            
                              "
                            
                            
                              '
                            
                            
                              "
                            
                            
                              ;

                            
                            
                              //
                            
                            
                              这个SQL语句接收两个字符串类型的参数:userName和password。但是,如果恶意用户在输入用户名或密码时添加了SQL代码,则可能会导致SQL注入攻击。例如,如果用户输入了以下内容作为密码:
                            
                            
      a
                            
                              '
                            
                            
                               OR 
                            
                            
                              '
                            
                            a
                            
                              '
                            
                            
                              =
                            
                            
                              '
                            
                            
                              a
 
                            
                            
                              //
                            
                            
                              则生成的SQL语句将变成:
                            
                            
      SELECT* FROM Users WHERE name=
                            
                              '
                            
                            
                              xxx
                            
                            
                              '
                            
                             AND password = 
                            
                              '
                            
                            
                              a
                            
                            
                              '
                            
                             OR 
                            
                              '
                            
                            
                              a
                            
                            
                              '
                            
                            =
                            
                              '
                            
                            
                              a
                            
                            
                              '
                            
                            
                              //
                            
                            
                              这个SQL语句将始终返回true,因为'a'='a'是永远成立的,所以用户可以绕过登录验证并访问数据库。


                            
                            
                              //
                            
                            
                              为了避免这种情况发生,我们可以使用MySqlParameter类来创建参数化查询。以下是一个示例:
                            
                            
                              string
                            
                             sql = 
                            
                              "
                            
                            
                              SELECT * FROM Users WHERE name=@UserName AND password=@Password
                            
                            
                              "
                            
                            
                              ;
      
                            
                            
                              using
                            
                             (MySqlConnection connection = 
                            
                              new
                            
                            
                               MySqlConnection(connectionString))
      {
          
                            
                            
                              using
                            
                             (MySqlCommand command = 
                            
                              new
                            
                            
                               MySqlCommand(sql, connection))
          {
              
                            
                            
                              //
                            
                            
                               创建参数
                            
                            
              command.Parameters.Add(
                            
                              new
                            
                             MySqlParameter(
                            
                              "
                            
                            
                              @UserName
                            
                            
                              "
                            
                            
                              , userName));
              command.Parameters.Add(
                            
                            
                              new
                            
                             MySqlParameter(
                            
                              "
                            
                            
                              @Password
                            
                            
                              "
                            
                            
                              , password));
              
              
                            
                            
                              //
                            
                            
                               打开连接并执行查询
                            
                            
                                            connection.Open();
              
                            
                            
                              using
                            
                             (MySqlDataReader reader =
                            
                               command.ExecuteReader())
              {
                  
                            
                            
                              //
                            
                            
                               处理结果集
                            
                            
                                            }
          }
      }

                            
                            
                              //
                            
                            
                              在这个示例中,我们使用了 @符号来标记参数名称,并使用MySqlParameter类为每个参数创建实例。这样,即使用户在输入用户名或密码时添加了SQL代码,它也不会影响生成的SQL语句。

                            
                            
                              //
                            
                            
                              总之,使用参数化查询是一个非常重要的安全措施,可以有效预防SQL注入攻击,C#提供了方便易用的MySqlParameter类来支持参数化查询。
                            
                          
View Code

  。

最后此篇关于C#写一套最全的MySQL帮助类(包括增删改查)的文章就讲到这里了,如果你想了解更多关于C#写一套最全的MySQL帮助类(包括增删改查)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com