C#之数据库操作类

简介:   平时在进行C#开发时,需要对数据库进行操作,下面介绍几种常见的操作数据库的方法:  一、操作类DataAccess  using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;  using System.Data;  using System.Data.SqlClient;  using DevExpress.XtraEditors;  using System.Windows.Forms;  //自己写的解密数据库链接dll,可

  平时在进行C#开发时,需要对数据库进行操作,下面介绍几种常见的操作数据库的方法:

  一、操作类DataAccess

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Text;

  using System.Data;

  using System.Data.SqlClient;

  using DevExpress.XtraEditors;

  using System.Windows.Forms;

  //自己写的解密数据库链接dll,可以忽略

  using ConnDatabase;

  namespace OperatDatabase

  {

  public class DataAccess

  {

  private static DataAccess _Access;

  public static DataAccess Access()

  {

  if( _Access==null )

  {

  _Access=new DataAccess();

  }

  return _Access;

  }

  //数据库链接,这里我用了配置文件DataSourse.ini,将链接信息进行了加密

  public static string sConnect=GetRasDatacase.RSADecrypt(GetRasDatacase.ReadProfileString(@".\DataSourse.ini", "DataSourse", "DataSourse_oa", ""));

  //数据库链接,比较直接的方式,安全性不高

  // public static string sConnect=string.Format("server={0};database={1};uid={2}; pwd={3};", "数据库ip", "数据库名称", "用户名", "密码");

  public static SqlConnection _Connect=new SqlConnection(sConnect);

  #region

  ///

  /// 执行sql语句返回数据表

  ///

  ///
  ///

  public DataTable GetTableBySql(String CmdText)

  {

  SqlConnection SqlCon=_Connect;

  SqlDataAdapter SqlAdp=null;

  DataTable dtTalble=null;

  try

  {

  if (SqlCon !=null && SqlCon.State !=ConnectionState.Open)

  {

  SqlCon.Open();

  }

  SqlAdp=new SqlDataAdapter(CmdText, SqlCon);

  dtTalble=new DataTable();

  SqlAdp.Fill(dtTalble);

  return dtTalble;

  }

  catch (Exception ex)

  {

  XtraMessageBox.Show("获取DataTable时发生错误:" + ex.Message, "警告!", MessageBoxButtons.OK, MessageBoxIcon.Error);

  return null;

  }

  finally

  {

  if (SqlCon !=null && SqlCon.State !=ConnectionState.Closed)

  {

  SqlCon.Close();

  }

  }

  }

  #endregion

  #region

  ///

  /// 通过表名获取数据表

  ///

  ///
  ///

  public DataTable GetTableByTableName(String TableName)

  {

  return GetTableBySql(String.Format("select * from {0}", TableName));

  }

  #endregion

  #region

  ///

  ///

  /// 执行存储返回数据表

  ///

  ///
  ///
  ///

  public DataTable GetTableByProcedure(String ProcedureName, SqlParameter[] Paramters)

  {

  SqlConnection SqlCon=null;

  SqlCommand SqlCmd=null;

  SqlDataAdapter SqlAdp=null;

  DataTable dtData=null;

  try

  {

  SqlCon=_Connect;

  if (SqlCon !=null && SqlCon.State !=ConnectionState.Open)

  {

  SqlCon.Open();

  }

  SqlCmd=new SqlCommand();

  SqlCmd.Connection=SqlCon;

  SqlCmd.CommandType=CommandType.StoredProcedure;

  SqlCmd.CommandText=ProcedureName;

  String ParametersName=String.Empty;

  String ParametersValue=String.Empty;

  SqlDbType ParamtersType=SqlDbType.Char;

  foreach (SqlParameter Paramter in Paramters)

  {

  ParametersName=Paramter.ParameterName;

  ParametersValue=Convert.ToString(Paramter.Value);

  ParamtersType=Paramter.SqlDbType;

  SqlCmd.Parameters.Add(ParametersName, Paramter.SqlDbType);

  SqlCmd.Parameters[ParametersName].Value=ParametersValue;

  }

  SqlAdp=new SqlDataAdapter(SqlCmd);

  dtData=new DataTable();

  SqlAdp.Fill(dtData);

  return dtData;

  }

  catch (Exception ex)

  {

  return null;

  }

  finally

  {

  if (SqlCon !=null && SqlCon.State !=ConnectionState.Closed)

  {

  SqlCon.Close();

  }

  }

  }

  #endregion

  #region

  ///

  /// 执行存储返回数据集

  ///

  ///
  ///
  ///

  public DataSet GetDataSetByProcedure(String ProcedureName, SqlParameter[] Paramters)

  {

  SqlConnection SqlCon=null;

  SqlCommand SqlCmd=null;

  SqlDataAdapter SqlAdp=null;

  DataSet dtData=null;

  try

  {

  SqlCon=_Connect;

  if (SqlCon !=null && SqlCon.State !=ConnectionState.Open)

  {

  SqlCon.Open();

  }

  SqlCmd=new SqlCommand();

  SqlCmd.Connection=SqlCon;

  SqlCmd.CommandType=CommandType.StoredProcedure;

  SqlCmd.CommandText=ProcedureName;

  String ParametersName=String.Empty;

  String ParametersValue=String.Empty;

  SqlDbType ParamtersType=SqlDbType.Char;

  foreach (SqlParameter Paramter in Paramters)

  {

  ParametersName=Paramter.ParameterName;

  ParametersValue=Convert.ToString(Paramter.Value);

  ParamtersType=Paramter.SqlDbType;

  SqlCmd.Parameters.Add(ParametersName, Paramter.SqlDbType);

  SqlCmd.Parameters[ParametersName].Value=ParametersValue;

  }

  SqlAdp=new SqlDataAdapter(SqlCmd);

  dtData=new DataSet();

  SqlAdp.Fill(dtData);

  return dtData;

  }

  catch (Exception)

  {

  return null;

  }

  finally

  {

  if (SqlCon !=null && SqlCon.State !=ConnectionState.Closed)

  {

  SqlCon.Close();

  }

  }

  }

  #endregion

  #region

  ///

  /// 执行sql语句,返回影响的记录数

  ///

  ///
  ///

  public int ExecuteSql(String sqlString)

  {

  using (SqlConnection connection=new SqlConnection(sConnect))

  {

  using (SqlCommand cmd=new SqlCommand(sqlString, connection))

  {

  try

  {

  connection.Open();

  int rows=cmd.ExecuteNonQuery();

  return rows;

  }

  catch (System.Data.SqlClient.SqlException e)

  {

  throw new Exception(e.Message);

  }

  }

  }

  }

  #endregion

  #region

  ///

  /// 执行存储返回字符串

  ///

  ///
  ///
  ///

  public String GetStringByProcedure(String ProcedureName, SqlParameter[] Paramters)

  {

  SqlConnection SqlCon=null;

  SqlCommand SqlCmd=null;

  SqlDataAdapter SqlAdp=null;

  DataTable dtData=null;

  try

  {

  SqlCon=_Connect;

  if (SqlCon !=null && SqlCon.State !=ConnectionState.Open)

  {

  SqlCon.Open();

  }

  SqlCmd=new SqlCommand();

  SqlCmd.Connection=SqlCon;

  SqlCmd.CommandType=CommandType.StoredProcedure;

  SqlCmd.CommandText=ProcedureName;

  String ParametersName=String.Empty;

  String ParametersValue=String.Empty;

  SqlDbType ParamtersType=SqlDbType.Char;

  foreach (SqlParameter Paramter in Paramters)

  {

  ParametersName=Paramter.ParameterName;

  ParametersValue=Convert.ToString(Paramter.Value);

  ParamtersType=Paramter.SqlDbType;

  SqlCmd.Parameters.Add(ParametersName, Paramter.SqlDbType);

  SqlCmd.Parameters[ParametersName].Value=ParametersValue;

  }

  SqlAdp=new SqlDataAdapter(SqlCmd);

  dtData=new DataTable();

  SqlAdp.Fill(dtData);

  return dtData.Rows[0].ItemArray[0].ToString();

  }

  catch (Exception ex)

  {

  return "F";

  }

  finally

  {

  if (SqlCon !=null && SqlCon.State !=ConnectionState.Closed)

  {

  SqlCon.Close();

  }

  }

  }

  #endregion

  #region

  ///

  /// 执行查询语句,返回SqlDataReader

  ///

  ///
  ///

  public SqlDataReader ExecuteReader(String strsql)

  {

  SqlConnection connection=new SqlConnection(sConnect);

  {

  SqlCommand cmd=new SqlCommand(strsql, connection);

  SqlDataReader myreader;

  try

  {

  connection.Open();

  myreader=cmd.ExecuteReader();

  return myreader;

  }

  catch (System.Data.SqlClient.SqlException e)

  {

  throw new Exception(e.Message);

  }

  finally

  {

  cmd.Dispose();

  connection.Close();

  }

  }

  }

  #endregion

  }

  }

  二、调用

  1、调用执行存储返回买二手游戏数据表

  DataTable data=DataAccess.Access().GetTableByProcedure("存储名称",

  new SqlParameter[]{

  new SqlParameter("@入参1",入参值1),

  new SqlParameter("@入参2",入参值2),

  });

  2、执行sql语句返回数据表

  String sql=String.Format("select * from t_user where code='{0}'", "1001");

  DataTable dt=DataAccess.Access().GetTableBySql(sql);

  3、使用SqlDataReader查询单条数据

  String sql=String.Format("select name from t_user where idCode='{0}'", "XXXX");

  DataTable dt=DataAccess.Access().GetTableBySql(sql);

  SqlDataReader red=DataAccess.Access().ExecuteReader(sql);

  String name="";

  while (red.Read())

  {

  name=(String)red[0];

  }

  如有不当之处,请多多指教!

目录
相关文章
|
7月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
168 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
1月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
2月前
|
SQL 缓存 大数据
C#高效处理大数据的批次处理,以及最好的数据库设计
C#高效处理大数据的批次处理,以及最好的数据库设计
92 0
|
3月前
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
360 6
|
4月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
213 3
C#winform中使用SQLite数据库
|
4月前
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
299 2
|
7月前
|
SQL 存储 Oracle
C#利用IDbCommand实现通用数据库脚本执行程序
C#利用IDbCommand实现通用数据库脚本执行程序
|
7月前
|
存储 SQL 数据库
C# 将 Word 转文本存储到数据库并进行管理
C# 将 Word 转文本存储到数据库并进行管理
141 2
|
7月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
220 1
C# .NET面试系列十:数据库概念知识