ITPUB??ì3
ITPUB论坛 » 开发工具和语言 » .NET软件架构与模式 » 分享一个自己写的好玩的东西,顺便散点处女分


标题: 分享一个自己写的好玩的东西,顺便散点处女分
离线 dotnetworker
一般会员



精华贴数 0
个人空间 0
技术积分 3604 (399)
社区积分 0 (1439478)
注册日期 2007-6-21
论坛徽章:33
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2008-5-22 09:30 
分享一个自己写的好玩的东西,顺便散点处女分

很喜欢linq但是公司的多个服务器都是win2000系统,又要在项目上挂接一些比较独立的小的新功能,
于是写了这个好玩的东西:)
处女贴~~心情还是有点激动阿,嘿嘿


这个东西怎么描述呢,其实就是一个简单的sql命令构造器,主要有两个类,Query, Command。
为了让这个构造器动起来,还写了一个数据库结构的转化器程序,这个程序的输入是(数据库连接字符串,名称空间,引用的名称空间),
输出是一堆cs代码文件,每个文件都是一个c#类,对应数据库中的一个表,然后把这些文件编译成一个库dll。

下面的代码就是使用这个构造器查询TblImages表,并读取FilePath和ImageName列,将结果存入一个IQueryResult的对象rs:
TblImages表是转化器从数据库生成的类,对应数据库中的[tblImages]表。

C# code
public PairCollection<ContentImage> GetImages(params string[] imagename) {
    PairCollection<ContentImage> images = new PairCollection<ContentImage>();
    TblImages ti = new TblImages();
    using (Query q = new Query(DataServiceConfig.ConnectionString)) {
        q.From(ti);
        q.Select(ti.FilePath.Top(imagename.Length), ti.ImageName);
        q.Where(ti.ImageName.In(imagename));
        IQueryResult rs = q.GetResult();
        if (rs.Count > 0) {
            foreach (IQueryResultRow row in rs) {
                images.Add(row[ti.ImageName].StringValue, new ContentImage(row[ti.FilePath].StringValue, row[ti.ThumbnailFilePath].StringValue));
            }
        }
    }
    return images;
}




也支持一些比较复杂的查询,例如多表联查:

C# code
using(Query q = new Query(DataServiceConfig.ConnectionString)) {
    TblPhotos tp = new TblPhotos();
    TblAlbum ta = new TblAlbum();
    q.Select(tp.FileName, tp.CreateDate, tp.UserName);
    q.Select(ta.AlbumName, ta.ID);
    q.From(ta, tp);
    q.Where(ta.ID == tp.AlbumID & ta.UserName == "smallfz");
    q.Where(ta.ID.In(223, 224, 459));
    IQueryResult rs = q.GetResult();
}




它生成的命令是:

SQL code
select t2.[FileName], t2.[CreateDate], t2.[UserName], t1.[AlbumName], t1.[ID]
from [tblAlbum] t1, [tblPhotos] t2
where
((t1.[ID]=t2.[AlbumID]) and (t1.[UserName]='smallfz')) and (t1.[ID] in (223, 224, 459))




另外也支持嵌套的查询。

另一个类是Command类,它与Query差不多,只不过它是用来执行insert,update,delete这种命令的,例如Update:

C# code
using(Command cmd = new Command()) {
    TblAlbum ta = new TblAlbum();
    cmd.Update(ta);
    cmd.Set(ta.AlbumName, "我的相册");
    cmd.Set(ta.IsShareAlbum, 0);
    cmd.Where(ta.ID == 223);
    // cmd.Execute();
}




它实际执行的sql命令是:

SQL codeupdate [tblAlbum] set [AlbumName]='我的相册', [IsShareAlbum]=0 where [ID]=223



基本就这些了,数据表中的列都继承自一个抽象类MetaCell,这个类重载了一大堆的运算符,除了这个列定义,还有其他的列;
比如Count/Max/Min的统计列:  

C# code
using(Query q = new Query()) {
    TblPhotos tp = new TblPhotos();
    q.Select(tp.AlbumID, tp.IsUserPhoto.Count());
    q.From(tp);
    q.GroupBy(tp.AlbumID);
    q.OrderBy(tp.IsUserPhoto.Count(), OrderByType.DESC);
    // q.GetResult();
}





SQL codeselect t1.[AlbumID], count(t1.[IsUserPhoto]) AS Count_IsUserPhoto
from [tblPhotos] t1

group by t1.[AlbumID]
order by count(t1.[IsUserPhoto]) DESC


只看该作者    顶部
离线 dotnetworker
一般会员



精华贴数 0
个人空间 0
技术积分 3604 (399)
社区积分 0 (1439478)
注册日期 2007-6-21
论坛徽章:33
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2008-5-22 09:30 
源代码(包含构造器和数据库结构转换器)下载:
http://bluemask.net/SqlPrjSource.rar


只看该作者    顶部
离线 mo_yuan_ming
水墨清风


精华贴数 6
个人空间 0
技术积分 5217 (249)
社区积分 6112 (235)
注册日期 2004-8-29
论坛徽章:22
现任管理团队成员ITPUB元老ITPUB北京香山2007年会纪念徽章会员2007贡献徽章紫蜘蛛2008北京奥运纪念徽章:举重
生肖徽章2007版:蛇生肖徽章2007版:蛇生肖徽章2007版:蛇生肖徽章2007版:兔生肖徽章2007版:鼠生肖徽章2007版:龙

发表于 2008-5-22 18:00 



只看该作者    顶部
离线 mosticy
中级会员


精华贴数 0
个人空间 0
技术积分 2380 (649)
社区积分 2182 (537)
注册日期 2007-10-9
论坛徽章:2
      
      

发表于 2008-5-22 19:20 
这里也可以散分的?


__________________
(止步海阔天空.)
只看该作者    顶部
离线 lyong
中级会员



精华贴数 0
个人空间 0
技术积分 250 (7634)
社区积分 83 (3683)
注册日期 2004-11-6
论坛徽章:0
      
      

发表于 2008-5-22 21:05 
这个是好事,支持一下


__________________
欢迎与我联系email:ly818919@sina.com我的plog :  http://blog.itpub.net/lyong我的主页:http://lyong.blogchina.com
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问