ADO.net 增删改查封装DBhelper
using System;
using System.Collections.Generic;
using System.Data.SqlClient;//引用数据库客户端
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Data;
namespace PubilcHelper
{
public class DBHelper
{
//连接数据库
static SqlConnection conn = new SqlConnection("连接字符串“);
static SqlDataReader sdr;
/// <summary>
/// 获取数据流 查询、显示、绑定下拉
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
private static SqlDataReader GetDataReader(string sql)
{
try
{
//打开
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
//命令对象
SqlCommand cmd = new SqlCommand(sql, conn);
sdr = cmd.ExecuteReader();
return sdr;
}
catch (Exception)
{ if (!sdr.IsClosed)//数据流关闭
{
sdr.Close();
}
throw;
} }
/// <summary>
/// 返回受影响行数
/// 添加、删除、修改
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static int ExecuteNonQuery(string sql)
{
try
{
//打开
//判断状态
if (conn.State == ConnectionState.Closed)
{
conn.Open();
} //命令对象
SqlCommand cmd = new SqlCommand(sql, conn);
int n = cmd.ExecuteNonQuery();
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
return n;
}
catch (Exception)
{ throw;
}
}
/// <summary>
/// 数据流转List
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sdr"></param>
/// <returns></returns>
private static List<T> DataReaderToList<T>(SqlDataReader sdr) {
Type t = typeof(T);//获取类型
//获取所有属性
PropertyInfo[] p = t.GetProperties();
//定义集合
List<T> list = new List<T>();
//遍历数据流
while (sdr.Read()) {
//创建对象
T obj = (T)Activator.CreateInstance(t);
//数据流列数
string[] sdrFileName = new string[sdr.FieldCount];
for (int i = ; i < sdr.FieldCount; i++)
{
sdrFileName[i] = sdr.GetName(i).Trim();
}
foreach (PropertyInfo item in p)
{
//判断Model中的属性是否在流的列名中
if (sdrFileName.ToList().IndexOf(item.Name) > -)
{
if (sdr[item.Name] != null && sdr[item.Name]!=DBNull.Value)
{
item.SetValue(obj, sdr[item.Name]);//对象属性赋值
}
else
{
item.SetValue(obj, null);//对象属性赋值
}
}
else {
item.SetValue(obj, null);//对象属性赋值
} }
list.Add(obj);
}
return list;
}
/// <summary>
/// 获取list集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static List<T> GetToList<T>(string sql) {
//获取流数据
SqlDataReader sdr = GetDataReader(sql);
List<T> list = DataReaderToList<T>(sdr);
if (!sdr.IsClosed)//数据流关闭
{
sdr.Close();
}
return list;
}
/// <summary>
/// 返回首行首列
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static object ExecuteScalar(string sql)
{
try
{
//打开
//判断状态
if (conn.State == ConnectionState.Closed)
{
conn.Open();
} //命令对象
SqlCommand cmd = new SqlCommand(sql, conn);
object n = cmd.ExecuteScalar();
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
return n;
}
catch (Exception)
{ throw;
}
} }
}
ADO.net 增删改查封装DBhelper的更多相关文章
- Ado.net[增删改查,GET传值]
1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Home.aspx.c ...
- Python pymysql 增删改查封装
关于pymysql 的增删改查,简单做个封装,方便后面使用直接拿来调用即可. 其中 增删改 的处理其实是一致的,本可以使用统一的方法,但是为了明显区分,这里分开来写了. 直接看代码就即可,如下: # ...
- PDO 增删改查封装的类
Selecting Data 你在mysql_*中是这样做的 <?php $result = mysql_query('SELECT * from table') or die(mysql_er ...
- spring学习(四)spring的jdbcTemplate(增删改查封装)
Spring的jdbcTemplate操作 1.Spring框架一站式框架 (1)针对javaee三层,每一层都有解决技术 (2)到dao 层,使用 jdbcTemplate 2.Spring对不同的 ...
- 网络系列之 cookie增删改查(封装)
什么是cookie 呢?简单来说,这个小东西,会记录你的 浏览器 浏览习惯,或 账号密码等, 以便于提高用户的体验感. 举个例子: 你们有没有发现,去淘宝一些购物网站, 你搜索了 椅子, 挑选了一会椅 ...
- python之MySQL学习——简单的增删改查封装
1.增删改查封装类MysqlHelper.py import pymysql as ps class MysqlHelper: def __init__(self, host, user, passw ...
- ADO.NET 增删改查的基本用法
ADO.NET:数据访问技术 就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中也可以将数据库中的数据提取到内存中供程序调用 所有数据访问技术的基础 连接 ...
- sql增删改查封装
App.config文件 <?xml version="1.0" encoding="utf-8" ?> <configuration> ...
- ADO.NET ORM数据库增删改查封装(工具一)
约束 public abstract class BaseModel { public int Id { get; set; } } 连接字符串 public static readonly stri ...
随机推荐
- Eslint常用命令
Eslint常用命令 自动修复(针对整个项目) npm run lint -- --fix 运行如上命令,eslint 会自动修复一些简单的错误. 全局安装 npm install -g eslint ...
- Java实验报告&&课程报告
Java实验报告 班级 计算机科学与技术二班 学号 20188450 姓名 李代传 完成时间 2019/9/19 评分等级 实验二 Java简单类与对象 实验目的 掌握类的定义,熟悉属性.构造函数.方 ...
- 高并发网络编程之epoll详解(转载)
高并发网络编程之epoll详解(转载) 转载自:https://blog.csdn.net/shenya1314/article/details/73691088 在linux 没有实现epoll事件 ...
- vsphere6.7-虚拟机与ESXI时间同步
环境介绍 esxi 6.7+vsphere6.7 需求配置 设置虚拟机时间与esxi时间同步.esxi时间与NTP服务器同步 配置方式 在esxi上开启NTP服务器时间同步,如下图: 修改虚拟服务器的 ...
- 【Python】【demo实验25】【练习实例】
原题: 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和. 我的源码: #!/usr/bin/python # encoding=utf-8 # -* ...
- 【2018】Python面试题【web框架】
1.谈谈你对http协议的认识. HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使 ...
- 【LOJ】#3014. 「JOI 2019 Final」独特的城市(长链剖分)
LOJ#3014. 「JOI 2019 Final」独特的城市(长链剖分) 显然我们画一条直径,容易发现被统计的只可能是直径某个距离较远的端点到这个点的路径上的值 用一个栈统计可以被统计的点,然后我们 ...
- 第一次入坑docker
直接进入主题 1.首先获取git clone项目 2.创建镜像:docker build -t="docker" .(注意千万不要忘了.) 3.列出镜像:docker images ...
- charindex函数的用法
例一: CustomName包含客户的First Name和Last Name,它们之间被一个空格隔开.我们用CHARINDX函数确定两个名字中间空格的位置.通过这个方法,我们可以分析ContactN ...
- 并不对劲的CF480E:Parking Lot
题目大意 有一个\(n\times m\)的网格,每个位置是黑色或者白色.\(k\)个操作,每个操作是将一个白格子染黑,操作后输出当前最大的白色正方形的边长.\(n,m,k\leq 2\times 1 ...