这是目前写的第二篇关于框架的使用文档,有什么不足的地方,还需大家指出,谢谢。
SQL类的创建及调用
目前采用 DbProviderFactory 实现 SQL 的方式完成快速开发。
连接的数据库是
(注明:这里使用的开发工具是 vs 2017 )
以下的写法,请先引用框架,UniversalFrame框架
框架地址:https://blog.youkuaiyun.com/qq_33484542/article/details/89840069
创建
新建一个类,名字随意,这个很简单,就不再赘述,不懂的请百度。
然后会生成如下:文件
using System;
using System.Collections.Generic;
namespace Test.DBA
{
public class TestDB
{
}
}
这个是系统为你生成的,这个时候我们只需要引用框架的命名空间。
using UniversalFrame;
using UniversalFrame.SqlKernel;
然后将TestDB类名后的继承改为 BaseDataProvider,这个时候回显示报错,你需要实现抽象类,
如图:
根据你的需要选择实现其中的一个。我实现了第二个,如图:
这里的 connString 是链接数据的连接,DbProviderType 枚举是选择连接的数据库。
以上完成了,整个SQL 部分的搭建,是不是很简单了?下面我们来实现对数据库的操作。
查询:
写一个查询:
using System;
using System.Collections.Generic;
using System.Data;
using UniversalFrame;//缺少了引用
using UniversalFrame.SqlKernel;//引用它
namespace Test.DBA
{
public class TestDB : BaseDataProvider
{
/// <summary>
/// 这是为了给父类链接语句
/// </summary>
/// <param name="connString"></param>
public TestDB(string connString) : base(connString, DbProviderType.SqlServer) //记住要实现的父类
{
}
/// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
public DataSet GetVote(int Count)
{
//第一种
var data1 = Database.ExecuteDataset(string.Format("SELECT Top({0}) * FROM [vote] WITH(NOLOCK)", Count));
//第二种
var data2 = Database.ExecuteDataset("SELECT Top(" + Count + ") * FROM [vote] WITH(NOLOCK)");
//第三种
var data3 = Database.ExecuteDataset(CommandType.Text, "SELECT Top(@Count) * FROM [vote] WITH(NOLOCK)", Database.MakeParam("Count", Count, ParameterDirection.Input));
//第四种
var data4 = Database.ExecuteDataset("SELECT Top(@Count) * FROM [vote] WITH(NOLOCK)", new { Count });
var data5 = Database.QueryList<vote>("SELECT Top(@Count) * FROM [vote] WITH(NOLOCK)", new { Count });
return data4;
}
}
}
以上是我给出的几种查询方法,大家请根据实际情况改动。还有很多就不写出来了,具体看注释。
新增:
其中一种方法如下:
/// <summary>
/// 通过语句新增
/// </summary>
/// <returns></returns>
public int AddVote(vote vote)
{
return Database.ExecuteNonQuery(" INSERT INTO[dbo].[vote]([Name],[Telephone],[Mail],[Img],[Ctime],[tops],[Address],[UID])VALUES" +
"(@Name,@Telephone,@Mail,@Img,@Ctime,@tops,@Address,@UID)", new { vote.Name, vote.Telephone, vote.Mail, vote.Img, vote.Ctime, vote.tops, vote.Address, vote.UID });
}
删除:
其中一种方法如下:
/// <summary>
/// 通过语句删除
/// </summary>
/// <returns></returns>
public int DeleteVote(int id)
{
return Database.ExecuteNonQuery(" DELETE FROM [dbo].[vote] WHERE ID = @id", new { id });
}
修改:
其中一种方法如下:
/// <summary>
/// 通过语句修改
/// </summary>
/// <returns></returns>
public int UpdateVote(vote vote)
{
return Database.ExecuteNonQuery(" UPDATE [dbo].[vote] SET [Name] = @Name,[Telephone] = @Telephone,[Mail] = @Mail,[Img] = @Img,[Ctime] = @Ctime,[tops] = @tops,[Address] = @Address,[UID] = @UID WHERE ID = @ID", new { vote.Name, vote.Telephone, vote.Mail, vote.Img, vote.Ctime, vote.tops, vote.Address, vote.UID, vote.ID });
}
以上都是最原始的增删改查操作,下面是存储过程的使用和分页。
存储过程:
举例如下:
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="Count">获取的条数</param>
/// <returns></returns>
public Message NET_GetVote(int Count)
{
return Database.GetMessageForDataSet("NET_GetVote", new { Count }, Database.MakeOutParam("strErrorDescribe", typeof(string), 127));
}
strErrorDescribe 这个字段是返回信息的。
Message 这个类是,存储过程执行完后的所有信息,都会返回在里面。
里面有多种写法,这里就不举例了。
分页:
举例如下:
/// <summary>
/// 获取分页列表
/// </summary>
/// <param name="whereQuery">条件语句</param>
/// <param name="pageIndex">页数</param>
/// <param name="pageSize">条数</param>
/// <param name="fields">查询的字段名</param>
/// <returns></returns>
public PagerSet GetPager(string whereQuery, int pageIndex, int pageSize, string[] fields)
{
const string orderQuery = "ORDER By Ctime DESC ";//排序顺序
PagerParameters pager = new PagerParameters("vote", orderQuery, whereQuery, pageIndex,
pageSize, fields);
return GetPagerSet(pager);
}
PagerParameters 这个类是分页操作类。用于分页查询,相关操作。
下面将写一种特殊对象,他是通过对单表的操作。实现高效的增删改查。
废话不多说直接上代码:
using System;
using System.Collections.Generic;
using System.Data;
using UniversalFrame;//缺少了引用
using UniversalFrame.SqlKernel;//引用它
namespace Test.DBA
{
public class TestDB : BaseDataProvider
{
/// <summary>
/// 获取表的完全对象
/// </summary>
private ITableProvider ITableVote;
/// <summary>
/// 这是为了给父类链接语句
/// </summary>
/// <param name="connString"></param>
public TestDB(string connString) : base(connString, DbProviderType.SqlServer) //记住要实现的父类
{
//表名
ITableVote = GetTableProvider("vote");
}
/// <summary>
/// 新增记录 第一种方式
/// </summary>
/// <returns></returns>
public int SetVote(vote vote)
{
//简化写法
//这个获取相关参数对象
Dictionary<string, object> keyValues = vote.ToDictionary();
keyValues.Remove("ID");//删除ID因为他无需添加
//使用这个写法表达
return ITableVote.Insert(keyValues);
}
/// <summary>
/// 新增记录 第二种方式
/// </summary>
/// <returns></returns>
public int SetVote1(vote vote)
{
//使用这个写法表达
return ITableVote.Insert(new { vote.Name, vote.Telephone, vote.Mail, vote.Img, vote.Ctime, vote.tops, vote.Address, vote.UID });
}
//下面我就简单例出,方法:
ITableVote.Get();//查询
ITableVote.GetObject<T>();//查询返回实体
ITableVote.GetObjectList<T>();//查询返回实体数组
ITableVote.Update();//修改
ITableVote.Delete();//删除
}
}
关于使用
直接上示例:
using UniversalFrame;//这个时候,我们引用他。
using UniversalFrame.Web;
namespace TestWeb
{
/// <summary>
/// test 的摘要说明
/// </summary>
public class Test : AshxResult
{
[Ashx(State = Ashx_State.Post)]
public void Vote(int Count = 20)
{
TestDB _TestDB = new TestDB("server=.;uid=sa;pwd=123456;database=test;Pooling=true");
var data = _TestDB.GetVote(Count);
Json(data.ToJSON()[0]);//DataSet对象转JSON,这个是方法。[0]是指第一张表
}
}
}
只是一个简易的示例。
运行结果
图一:
图二:
图三:
图四:
以上是SQL部分的示例,感谢您的阅读,有何见解,请留言,也希望大家能提出优化的方向,在此谢过了。