基于三层架构下的公共数据访问方法(Sqlite数据库)
作者总结了一下,使用Winform的三层架构做窗体应用程序,在数据访问方面,有用到纯sql语句方法、参数方法、存储过程方法。
那么什么是三层架构呢?
UI---存放Form窗体---(用户所关心的)
业务逻辑层----存放业务传递(BLL)
数据访问层----底层的数据处理方法(DAL)
数据公共访问方法---SqlHelper(DBUtilty)
使用三层架构设计Winform程序,能够达到”高内聚、低耦合“.团队分工明确,适用于大型的企业级项目
现在我提供一下SQLite数据库的访问方法
第一步:配置数据库。在App.config里
<connectionStrings>
<add name="sqlite" connectionString="data source=|datadirectory|..\..\Hosptial.db;Pooling=true;FailIfMissing=false" providerName="System.Data.SQLite" />
</connectionStrings>
注意:我把数据库文件放在外层了,所以就必须多加【..\..\】,如果放在bin--debug文件加下就要写成|datadirectory|Hosptial.db
第二步:连接配置文件
1.新建一个类SqlHelper.引入命名空间:using System.Data; using System.Data.Sqlite; using System.Configuration;
2.添加引用:引用--添加引用--勾选System.Configuration
3.连接配置文件:在类中添加代码: private static string conn = ConfigurationManager.ConnectionStrings["sqlite"].ToString();
注意:中括号里的["___"]名称必须要与App.Config里的connectionStrings的name相同,否则会出现异常
4.建立公共方法(错误输出到本地的方法,参照我的另一篇博客https://www.cnblogs.com/970728-qi/p/9826476.html)
- 普通数据访问方法
//1.执行sql语句,并返回受影响的行数,在使用Command向数据库发送增、删、改命令时,通常使用ExecuteNonQuery方法
public static int Update(string sql)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
try
{
sqlcon.Open();
return sqlcmd.ExecuteNonQuery();
}
catch (Exception e)
{
PrintError(e.Message);//将错误信息保存到本地
throw new Exception("调用 public static int Update(string sql)方法时出错" + e.Message);
}
finally
{
sqlcon.Close();//关闭练连接
}
}
//2.执行Sql语句,返回结果集的第一行,第一列。通常使用ExecuteScalar方法
public static object SingResult(string sql)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
try
{
sqlcon.Open();
return sqlcmd.ExecuteScalar();
}
catch (Exception e)
{
PrintError(e.Message);
throw new Exception("调用public static object SingResult(string sql)方法时出错:" + e.Message);
}
finally
{
sqlcon.Close();
}
}
//3.执行sql语句,生成一个包含数据的SQLiteDataReader对象实例
public static SQLiteDataReader GetReader(string sql)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
try
{
sqlcon.Open();
return sqlcmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception e)
{
sqlcon.Close();
PrintError(e.Message);
throw new Exception("调用public static SQLiteDataReader GetReader(string sql)方法时出错:" + e.Message);
}
}
//4.产生dataTable对象
public static DataTable GetDataTable(string sql)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
SQLiteDataAdapter da = new SQLiteDataAdapter(sqlcmd);//创建适配器对象
DataTable table = new DataTable();
try
{
sqlcon.Open();
da.Fill(table);
return table;
}
catch (Exception e)
{ PrintError(e.Message);
throw new Exception("调用public static DataSet GetDataSet(string sql)方法时出错:" + e.Message);
}
finally
{
sqlcon.Close();
}
}
- 参数方法
public static int UpdateParam(string sql, SQLiteParameter[] parameter)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
try
{
sqlcon.Open();
sqlcmd.Parameters.AddRange(parameter);
return sqlcmd.ExecuteNonQuery();
}
catch (Exception e)
{
PrintError(e.Message);
throw new Exception("调用 public static int UpdateParam(string sql, SQLiteParameter[] parameter)方法时出错" + e.Message);
}
finally
{
sqlcon.Close();
}
} public static object SingleResultParam(string sql, SQLiteParameter[] parameter)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
try
{
sqlcon.Open();
sqlcmd.Parameters.AddRange(parameter);
return sqlcmd.ExecuteScalar();
}
catch (Exception e)
{
PrintError(e.Message); throw new Exception("调用 public static object SingleResultParam(string sql, SQLiteParameter[] parameter)方法时出错" + e.Message);
}
finally
{
sqlcon.Close();
}
} public static SQLiteDataReader GetReaderParam(string sql, SQLiteParameter[] parameter)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
try
{
sqlcon.Open();
sqlcmd.Parameters.AddRange(parameter);
return sqlcmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception e)
{
sqlcon.Close();
PrintError(e.Message);
throw new Exception("调用public static SQLiteDataReaderParam GetReader(string sql,SQLiteParameter[] parameter)方法时出错" + e.Message);
}
} - 存储过程方法
public static int UpdateProce(string spName, SQLiteParameter[] parameter)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(spName, sqlcon);
try
{
sqlcon.Open();
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.Parameters.AddRange(parameter);
return sqlcmd.ExecuteNonQuery();
}
catch (Exception e)
{
PrintError(e.Message);
throw new Exception("调用public static int UpdateProce(string spName,SQLiteParameter[] parameter)方法出错:" + e.Message);
}
finally
{
sqlcon.Close();
} }
public static object SingleResultProc(string spName, SQLiteParameter[] paramter)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(spName, sqlcon);
try
{
sqlcon.Open();
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.Parameters.AddRange(paramter);
return sqlcmd.ExecuteScalar(); }
catch (Exception e)
{
PrintError(e.Message);
throw new Exception("调用 public static object SingleResultProc(string spName,SQLiteParameter[] paramter)方法出错:" + e.Message);
}
finally
{
sqlcon.Close();
}
}
public static SQLiteDataReader GetReaderProc(string spName, SQLiteParameter[] parameter)
{
SQLiteConnection sqlcon = new SQLiteConnection(conn);
SQLiteCommand sqlcmd = new SQLiteCommand(spName, sqlcon);
try
{
sqlcon.Open();
sqlcmd.Parameters.AddRange(parameter);
sqlcmd.CommandType = CommandType.StoredProcedure;
return sqlcmd.ExecuteReader(CommandBehavior.CloseConnection); }
catch (Exception e)
{
sqlcon.Close();
PrintError(e.Message);
throw new Exception("调用 public static SQLiteDataReader GetReaderProc(string spName, SQLiteParameter[] parameter)方法出错:" + e.Message);
} }因为会写第一个基本的sqlite语句方法,其他两种都大致相同。作者就不再赘述了,如有错误欢迎指正,如若转载,请标注出处。
基于三层架构下的公共数据访问方法(Sqlite数据库)的更多相关文章
- MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...
- MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-08,部署到IIS服务器
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- Delphi数据库的三层架构的问题和解决方法
Delphi数据库的三层架构的问题和解决方法 原创 2014年03月26日 16:26:03 标签: Delphi / 数据库三层架构 / DCOM / DCOMConnection 790 //-- ...
- 三层架构下的EntityFramework codefirst
好久没写博客了,今天研究了EF框架的CodeFirst模式,从字面意思可以看出,代码优先.所谓代码优先,与以往的添加ado.net不同,主要是编写代码生成数据库和数据表,生成数据实体映射.个人感觉这种 ...
- MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-04,实现分页
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-05,实现导航
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
随机推荐
- python的oop概述
python是面向对象的语言,那么究竟什么是面向对象? 首先理解类 类:在中文中的定义,许多相同或相似事物的综合.根据这个定义,类是许多相同或相似的实物聚在一起的.譬如,人类,鸟类,花类等. 面向对象 ...
- xampp——apache服务启动问题(端口占用)
Apache启动提示 20:39:02 [Apache] Error: Apache shutdown unexpectedly.20:39:02 [Apache] This may be due t ...
- mycat 单库多表实现水平分片
环境 mycat : 192.168.126.128 root root mysql1: 192.168.126.129:3306 root lizhenghua mysql2: 192.168.12 ...
- centos7救援模式--误删/usr/bin/恢复
模拟场景 centos7 误删/usr/bin/等系统内置文件夹, 导致几百个内置命令丢失. 修复 rescue模式 vm模拟一遍(如果在物理机, 可通过U盘方式直接开机U盘进入选择救援模式, 方式通 ...
- radhat6.6上安装oracle12c RAC (二)
二.GI(Grid Infrastructure)安装 首先将安装包传到node1的目录 2.1 GI软件安装 2.1.1.解压安装包 #su - grid解压 GRID 到 GRID用户的$ORAC ...
- [pycocotools修改]cocoeval.py
__author__ = 'tsungyi' import numpy as np import datetime import time from collections import defaul ...
- SpringBoot Tomcat启动报错
中间的桥梁就是下面这个依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over ...
- P4717 【模板】快速沃尔什变换
思路 FWT的模板 FWT解决这样的卷积 \[ C_k=\sum_{i\otimes j=k} A_iB_j \] \(\otimes\)可能是and,or,xor等位运算 几个式子 FWTand: ...
- SQLServer 2008 R2查看字段约束
SQLServer 2008 R2 删除字段前检查字段的约束: select a.name,b.name as cname from syscolumns a left join sysobjects ...
- python程序—士兵出击
class Gun: def __init__(self,gun_type): self.gun_type=gun_type self.bullet_count= def add_bullet(sel ...