随笔 - 322  文章 - 2  评论 - 6157 

上一篇:CYQ.Data 轻量数据层之路 使用篇一曲 裸身走天涯(十二)

 

前言说明:

本篇继续上一篇内容,本节介绍所有相关查询的使用。

主要内容提要:
1:单行数据操作 Fill 操作 GetCount操作。
2:多行数据操作 Select 操作
3:列表绑定控件操作 配合分页控件
4:多表查询及绑定 视图及自定义SQL

 

 

单行数据操作

 

一:Fill 填充方法,单行查询

方法原形:public bool Fill(object where)

示例1:直传ID

MAction action = new MAction(TableNames.Users);
if (action.Fill(888))//查询ID=888的单行数据
{
   action.SetTo(lblUserName);
   action.Close();
}

示例2:传where条件

MAction action = new MAction(TableNames.Users);
if (action.Fill("id=888 or UserName='路过秋天'"))//查询ID=888或用户名为"路过秋天"的单行数据
{
   action.SetTo(lblUserName);
   action.Close();
}

 

示例3:where条件附带order by

MAction action = new MAction(TableNames.Users);
if (action.Fill("id>888 order by id desc"))//查询ID>888的结果中取ID最大的的单行数据
{
   action.SetTo(lblUserName);
   action.Close();
}

 

 

二:GetCount 取统计总数

方法原形:public int GetCount(string where)

 

示例1:

MAction action = new MAction(TableNames.Users);
int count=action.GetCount("id>10");
action.Close();

 

 

多行数据操作

 

三:Select 多数据查询

方法原形:
1public MDataTable Select()
2public MDataTable Select(int PageIndex, int PageSize, string Where, out int RowCount)

示例1:

MAction action = new MAction(TableNames.Users);
MDataTable tabme 
= action.Select();//查询所有数据
action.Close();

示例2:

int count;//这个为返回的记录总数
MAction action = new MAction(TableNames.Users);
MDataTable tabme 
= action.Select(1,10,"id>10 order by username desc",out count);//查询id>10的10条记录[第1页,每页10条数据,结果按usename排序]
action.Close();

 

附加说明:

Select 选择所有数据,方法内部原理为:
public MDataTable Select()
{
   
int count;
   
return Select(00""out count);
}

 

列表绑定操作

 

四:绑定GridView/DataList/Repeater

示例1:查询所有直接绑定

MAction action = new MAction(TableNames.Users);
MDataTable table 
= action.Select();
action.Close();
gvUsers.DataSource 
= table;
gvUsers.DataBind();

示例2:配合 分页控件 实战 Post篇 分页控件绑定 [下载地址:CYQ.Data 轻量数据层之路 bug反馈、优化建议、最新框架下载 ]

public void BindData()
{
        
int count;
        MAction action 
= new MAction(TableNames.Users);
        MDataTable table 
= action.Select(Pager1.PageIndex,Pager1.PageSize, "id>10"out count);
        action.Close();
        gvUsers.DataSource 
= table;
        gvUsers.DataBind();
        Pager1.Count 
= count;//设置记录总数
        Pager1.BindName = "BindData";//绑定方法名称
}

示例3:配合其它Get方式分页控件绑定

public void BindData()
{
        
int count;
        MAction action 
= new MAction(TableNames.Users);
        MDataTable table 
= action.Select(Pager1.PageIndex,Pager1.PageSize, "id>10"out count);
        action.Close();
        gvUsers.DataSource 
= table;
        gvUsers.DataBind();
        Pager1.Count 
= count;
}

说明:

如果你使用的分页控件比上面的使用情况复杂,你可以考虑优化或弃用原有的分页控件了。

 

多表查询及绑定

 

五:视图方式

示例1:和表操作一样,唯一区别就是表名换成视图名称

public void BindData()
{
        
int count;
        MAction action 
= new MAction(ViewNames.V_Users);
        MDataTable table 
= action.Select(Pager1.PageIndex,Pager1.PageSize, "id>10"out count);
        action.Close();
        gvUsers.DataSource 
= table;
        gvUsers.DataBind();
        Pager1.Count 
= count;
        Pager1.BindName 
= "BindData";
}

 

六:自定义构造多表SQL语句

示例1:

public void BindData()
{
      
string customTable = "(select u.*,m.Body from Users u left join Message m on u.ID=m.UserID) v";
      
int count;
      MAction action 
= new MAction(customTable);
      MDataTable table 
= action.Select(Pager1.PageIndex,Pager1.PageSize, "id>10"out count);
      action.Close();
      gvUsers.DataSource 
= table;
      gvUsers.DataBind();
      Pager1.Count 
= count;
      Pager1.BindName 
= "BindData";
}

说明:

在具体使用过程中,为了方便管理,直接出现在自定义SQL语句就不这样直接写在界面中了,可以新项建一个项目统一管理自定义的SQL。

 

结言:

 

看完本篇示例,对于查询这一块应该明白了。配合起分页控件起来,实现还是很简单的。
其它用法请关注下一篇:名称未定。

 

 

版权声明:本文原创发表于 博客园,作者为 路过秋天,博客 http://cyq1162.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
posted on 2010-09-03 15:14 路过秋天 阅读(1622) 评论(23) 编辑 收藏

 回复 引用 查看   
#1楼 2010-09-03 15:33 | XinXin_Shine      
顶一顶...
 回复 引用 查看   
#2楼[楼主] 2010-09-03 16:59 | 路过秋天      
@XinXin_Shine
过了这么久,就你来顶,还是你关注度高些。

 回复 引用 查看   
#3楼 2010-09-03 16:59 | tianlong88      
不错,顶下,支持楼主发更好的这方面的文章。
 回复 引用 查看   
#4楼 2010-09-03 17:00 | 阿龍      
UP UP
 回复 引用 查看   
#5楼 2010-09-03 17:10 | 装配中的脑袋      
不错,正在使用中。。
 回复 引用 查看   
#6楼[楼主] 2010-09-03 17:11 | 路过秋天      
@阿龍
@tianlong88
:) smile 欢迎继续支持~~

 回复 引用 查看   
#7楼[楼主] 2010-09-03 17:16 | 路过秋天      
@装配中的脑袋
:) smile 多使用多反馈,欢迎继续支持~~

 回复 引用 查看   
#8楼 2010-09-03 21:09 | 海浪~~      
看完,期待介绍点复杂的
 回复 引用 查看   
#9楼[楼主] 2010-09-03 22:59 | 路过秋天      
@海浪~~
我的框架用起来都很简单,想复杂点,这个还真有点难度~~哈哈!

 回复 引用 查看   
#10楼 2010-09-04 18:59 | 小易V      
呵呵 终于有些明白了
 回复 引用 查看   
#11楼[楼主] 2010-09-04 19:05 | 路过秋天      
@小易V
没办法了,你们太懒了,我只有努力写帮助文章了。

 回复 引用 查看   
#12楼 2010-09-15 23:59 | 大师兄      
private void button2_Click(object sender, EventArgs e)
{
            try
            {
                MAction action = new MAction(TableNames.Products);
                if (action.Fill(1))//报错(未将对象引用设置到对象的实例)
                {
                    action.SetTo(labProductName);
                    action.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

 回复 引用 查看   
#13楼[楼主] 2010-09-16 00:17 | 路过秋天      
@大师兄
请查看数据库链接是否正确~!
用本框架,不用加try catch~!

 回复 引用 查看   
#14楼 2010-09-17 00:43 | 大师兄      
@路过秋天
秋天哥
我的连接字符是
<add name="Conn" connectionString="Data Source=.\SQLExpress;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\DB\NORTHWND.MDF;User Instance=true" providerName="System.Data.SqlClient"/>
在辅助工具中连接成功
我没有安装SQL2005用的是.Net自带的那个

 回复 引用 查看   
#15楼[楼主] 2010-09-17 13:33 | 路过秋天      
@大师兄
我看到你有“TableNames.Products”,这个是你手动写出来的,还是用OutPutData类生成的?如果能生成,说明数据库应该链接应该是没问题的。
if (action.Fill(1))
1:默认会组成where条件即“id=1",所以你的Products需要一个id列。
2:接着会调用分页存储过程SelectBase,所以项目一开始有个生成存储过程的,请检查一下。
3:如果问题还不明确,请截图发来看看,或到V1。3版本开源文章那按提示留言入群。
4:可下载V1。3版本源码直接调试。

 回复 引用 查看   
#16楼 2010-09-17 20:40 | 大师兄      
好的,谢谢秋天哥
 回复 引用 查看   
#17楼[楼主] 2010-09-17 20:48 | 路过秋天      
@大师兄
如果遇到问题,欢迎继续留言。如果已解决,也留个言说明下是什么问题。

 回复 引用 查看   
#18楼 2010-09-17 23:05 | 大师兄      
数据库TestDB.MDF
City 表
CityID 城市编号
CityName 城市名称
CityDesc 描述

App.config
<add name="Conn" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Db\TestDB.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True" />

TableNames.cs
namespace TableEnum
{
    public enum TableNames { Citys }
    #region 表字段枚举
    public enum Citys
    {
        /// <summary> 
        /// 城市编号
        /// </summary>
        CityID,
        /// <summary> 
        /// no description
        /// </summary>
        CityName,
        /// <summary> 
        /// 描述
        /// </summary>
        CityDesc
    }
    #endregion
}


frmCity.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CYQ.Data;
using TableEnum;

namespace DbTest
{
    public partial class frmCity : Form
    {
        public frmCity()
        {
            InitializeComponent();
            MessageBox.Show(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2005());
            EventBind();
        }

        private void EventBind()
        {
            btAdd.Click += new EventHandler(Add);
            btDel.Click += new EventHandler(Del);
            btUpdate.Click += new EventHandler(Update);
            btFind.Click += new EventHandler(Find);
        }

        private void Add(object sender, EventArgs e)
        {

        }

        public void Update(object sender, EventArgs e)
        {

        }

        public void Del(object sender, EventArgs e)
        {

        }

        public void Find(object sender, EventArgs e)
        {
            MAction action = new MAction(TableNames.Citys);
            dgvCitys.DataSource = action.Select();
        }

        public void Select(object sender, EventArgs e)
        {
            MAction action = new MAction(TableNames.Citys);
            if (action.Fill(dgvCitys.CurrentRow.Cells[0].Value))
            {
                action.SetTo(txtCityName);
                action.SetTo(txtCityDesc);
            }
        }
    }
}

没有报错,也不会显示
dgvCitys,txtCityName,txtCityDesc都是UI控件
我创建的是winform应用程序
TableNames.Products是用辅助工具生成的
CYQ.Data.dll的版本是1.6.0.0

 回复 引用 查看   
#19楼[楼主] 2010-09-18 00:16 | 路过秋天      
@大师兄
本框架对于表的操作,至少存在一个ID列。
City 表
CityID 城市编号
CityName 城市名称
CityDesc 描述
将cityID字段改成ID字段即可。

 回复 引用 查看   
#20楼 2010-09-18 18:55 | 大师兄      
@路过秋天
我用CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutForSql2005()生成了SelectBase分页存储过程
将cityID字段改成ID字段
就没问题啦。
这个框架不错可以提高开发效率。
谢谢秋天哥分享

 回复 引用 查看   
#21楼[楼主] 2010-09-18 21:14 | 路过秋天      
@大师兄
欢迎使用,欢迎使用中遇到什么问题或有其它建议,或有使用感言,都欢迎积极留言~

 回复 引用 查看   
#22楼 2010-12-14 11:55 | darkmice      
怎么调用存储过程呢
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1817006 3es5KO6YaWY=