关于UniversalFrame框架下 SQL 的创建及使用

这是目前写的第二篇关于框架的使用文档,有什么不足的地方,还需大家指出,谢谢。

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部分的示例,感谢您的阅读,有何见解,请留言,也希望大家能提出优化的方向,在此谢过了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值