问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用DbHelper连接数据库

发布网友 发布时间:2022-04-07 17:09

我来回答

3个回答

懂视网 时间:2022-04-07 21:30

     管理数据库连接字符串,数据库类型(供应商),创建线程内唯一的数据库连接。

技术分享
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Common
{
 /// <summary>
 /// 数据库管理类
 /// </summary>
 public class DBManager
 {
 //配置文件中的数据库连接字符串
 private static readonly string connectionStr = ConfigurationManager.AppSettings["conStr"];

 /// <summary>
 /// 数据库类型 默认支持sqlserver数据库
 /// </summary>
 public static readonly string dbProviderName = string.IsNullOrEmpty(ConfigurationManager.AppSettings["dbProviderName"])
       ? "System.Data.SqlClient" : ConfigurationManager.AppSettings["dbProviderName"];

 [ThreadStatic]
 public static DBHelper helper;

 /// <summary>
 /// 创建数据库访问类,且线程内唯一
 /// </summary>
 /// <returns></returns>
 public static DBHelper Instace()
 {
  if (helper == null)
  {
  helper = new DBHelper(connectionStr, dbProviderName);
  return helper;
  }
  return helper;
 }

 }
}
View Code

DBHelper类:

   工厂类创建各类数据库,以及基本操作方法。

技术分享
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;


namespace Common
{
 /// <summary>
 /// 数据库工具类
 /// </summary>
 public class DBHelper
 {
 //数据库连接字符串
 private string connectionStr = string.Empty;
 //数据库工厂,用于创建不同数据库的连接
 private DbProviderFactory factory;
 //数据库连接
 private DbConnection _connection;

 public DbConnection Connection
 {
  get { return _connection; }
  set { _connection = value; }
 }
 /// <summary>
 /// 构造方法获得一个工厂。
 /// </summary>
 /// <param name="connectionStr">数据库连接字符串</param>
 /// <param name="dbProviderName">数据库类型</param>
 public DBHelper(string connectionStr, string dbProviderName)
 {
  this.connectionStr = connectionStr;
  factory = DbProviderFactories.GetFactory(dbProviderName);
 }

 /// <summary>
 /// 打开数据库连接
 /// </summary>
 public void OpenConnection()
 {
  if (Connection == null)
  {
  Connection = factory.CreateConnection();
  Connection.ConnectionString = connectionStr;
  }
  if (Connection.State != ConnectionState.Open)
  {
  Connection.Open();
  }
 }

 /// <summary>
 /// 得到Command对象
 /// </summary>
 /// <param name="cmdType"></param>
 /// <param name="cmdText"></param>
 /// <param name="pars"></param>
 /// <returns></returns>
 private DbCommand CreateCmd(CommandType cmdType, string cmdText, params DbParameter[] pars)
 {
  DbCommand cmd = factory.CreateCommand();
  cmd.Connection = Connection;
  cmd.CommandType = cmdType;
  cmd.CommandText = cmdText;
  if (pars != null)
  {
  cmd.Parameters.AddRange(pars);
  }

  return cmd;
 }
 /// <summary>
 /// 得到reader对象
 /// </summary>
 /// <param name="cmdType"></param>
 /// <param name="cmdText"></param>
 /// <param name="pars"></param>
 /// <returns></returns>
 public DbDataReader ExecuteReader(CommandType cmdType, string cmdText, params DbParameter[] pars)
 {
  OpenConnection();
  DbCommand cmd = CreateCmd(cmdType, cmdText, pars);
  return cmd.ExecuteReader();
 }
 /// <summary>
 /// 执行非查询操作,返回影响行数
 /// </summary>
 /// <param name="cmdType"></param>
 /// <param name="cmdText"></param>
 /// <param name="pars"></param>
 /// <returns></returns>
 public int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] pars)
 {
  OpenConnection();
  DbCommand cmd = CreateCmd(cmdType, cmdText, pars);
  int count = cmd.ExecuteNonQuery();
  Connection.Close();
  if (count > 0)
  {
  return count;
  }
  else
  {
  return -1;
  }
 }

 /// <summary>
 /// 返回查询的第一行第一列
 /// </summary>
 /// <param name="cmdType"></param>
 /// <param name="cmdText"></param>
 /// <param name="pars"></param>
 /// <returns></returns>
 public object ExecuteScal(CommandType cmdType, string cmdText, params DbParameter[] pars)
 {
  OpenConnection();
  DbCommand cmd = CreateCmd(cmdType, cmdText, pars);
  object obj = cmd.ExecuteScalar();
  Connection.Close();
  return obj;
 }

 /// <summary>
 /// 根据查询获取数据集
 /// </summary>
 /// <param name="cmdType"></param>
 /// <param name="cmdText"></param>
 /// <param name="pars"></param>
 /// <returns></returns>
 public DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params DbParameter[] pars)
 {
  OpenConnection();
  DbCommand cmd = CreateCmd(cmdType, cmdText, pars);
  DbDataAdapter da = factory.CreateDataAdapter();
  da.SelectCommand = cmd;
  DataSet ds = new DataSet();
  da.Fill(ds);
  Connection.Close();
  return ds;
 }

 #region 创建类的对象,返回泛型集合
 public static IList<T> ToList<T>(DbDataReader reader)
 {
  Type type = typeof(T);
  IList<T> list = null;
  if (type.IsValueType || type == typeof(string))
  list = CreateValue<T>(reader, type);
  else
  list = CreateObject<T>(reader, type);
  reader.Dispose();
  reader.Close();
  return list;
 }
 private static IList<T> CreateObject<T>(DbDataReader reader, Type type)
 {
  IList<T> list = new List<T>();
  PropertyInfo[] properties = type.GetProperties();
  string name = string.Empty;
  while (reader.Read())
  {
  T local = Activator.CreateInstance<T>();
  for (int i = 0; i < reader.FieldCount; i++)
  {
   name = reader.GetName(i);
   foreach (PropertyInfo info in properties)
   {
   if (name.Equals(info.Name)) { info.SetValue(local, Convert.ChangeType(reader[info.Name], info.PropertyType), null); break; }
   }
  }
  list.Add(local);
  }
  return list;
 }
 private static IList<T> CreateValue<T>(DbDataReader reader, Type type)
 {
  IList<T> list = new List<T>();
  while (reader.Read())
  {
  T local = (T)Convert.ChangeType(reader[0], type, null);
  list.Add(local);
  }
  return list;
 }
 #endregion

 }
}
View Code

 

两个类管理数据库连接和基本操作DBManager------DBHelper

标签:

热心网友 时间:2022-04-07 18:38

table应该是内存中的一个数据表,在C#是DataTable,DBHelper是自己写的一个数据库操作类,GetDateSet()是DBHelper类中的一个获取数据的方法,参数sql则是读取数据的sql语句,例如:select * from student。
综上所述:这一句话和连接字符串一点关系都没有。其作用是执行sql语句从数据库中读取出来数据并填充在DataTable中。。
你这写法,有点像北大青鸟的写法。

热心网友 时间:2022-04-07 19:56

DbHelper是自己定义和实现的类,你这种说法看来还不清楚这个概念是什么!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
武汉大学在职研究生考试科目有哪些 报考武汉大学在职研究生录取率高吗? 武汉大学mpa在职研究生好考吗 忘记车子买哪家保险 怎么查 67年的羊和什么生肖最配夫妻 67年的羊和69年鸡相配吗? 67年羊男与69年鸡女同是11月出生婚配如何? 67年9月和69年十月的结婚 “新菊亦侵篱”的出处是哪里 “闲绕篱头看菊花”的出处是哪里 如何选择合适的EMBA备考辅导书 EMBA的主要教材有哪些? 美籍华人是中国人吗? 保险公司理赔必须责任双方本人到场吗 华人指的是中国人吗? 美籍华裔算是中国人吗 中国人的定义是什么,华侨,华裔和华人是中国人吗 交通事故去保险公司理赔需要双方到吗 魔力宝贝满档宠物 求LINUX 红帽子9怎么卸载了原有的GDB 在安装新的GDB centos6.8哪个版本是带桌面的 做梦扛一梱干柴 oracle linux 6.8怎么样 如何用虚拟机安装rhel6.8 作业帮老师教的大招都一样吗? 作业帮英语老师讲的大招真的能秒杀完型填空么? 请问您的作业帮大招资料改如何get? 像520这样的数字 作业帮中帮主大招秀在哪里 脸用数字几代替,比如520是我爱你,死不要脸是用什么数字代替呢? 北大光华管理学院emba课程教材都有什么 EMBA辅导用书有哪些 MBA和EMBA都有哪些教科书 北大EMBA教学教材有哪些 南洋理工大学商学院emba的课程有哪些 想跨系考研考工商管理应该看什么书 备考EMBA事先如何准备 北大emba考什么啊 EMBA考试科目有哪些 软考证书是不是没用了,别人都不承认 lol英雄联盟弗雷尔卓德有哪些英雄 英雄联盟里,都有那几派势力,哪些英雄是一派的? 驾照扣12分,重新考科目一是考什么? Navicat for MySQL自动备份数据库,我要怎么查看是否自动备份了,还有备份的文件到哪里去了? 驾照分扣完了重新学习考科目一有时间限制吗? navicat 如何导入psc 备份文件 驾驶证扣12分后重新科目一考试有时间限制吗? 驾驶证暂扣,重考科目一,学习几天,每天学习多久? 我的驾照换证过了时间,要重新考科目一,问现在是考几题? 驾驶证一次扣满十二分后,重考驾照要考哪些科目?