开源的数据库组建躲如牛毛,
优秀的也比我们写过的系统还多很多。
可是真用的时候总是力不从心,要不用起来太烦, 要不配置太烦,要不干脆没有自己想要的功能。
题外:
上次发的组建被扔到新手区以后久久不敢发帖,
抗打击能力确实比较糟糕
这次希望dudu能让我摆一小阵子,因为确实不懂的地方还很多,希望大家可以指教
引言:
.net其实支持多数据库还是蛮好的, 只是真正用到数据库的时候却不免让人觉得别扭。
历程: sqlhelper,想谁都不会陌生, petshop3.0的时候就狠狠的爱上了这东西了。
可惜支持sqlserver对我们这些做中小型网站的来说是很别扭的,或者完全没有必要的。
我们更重要的是Access,于是乎改成了AccessHelper,
从那时候开始, 跨数据库操作一直就成了疙瘩,
咋就不能同时支持呢!
不久,企业库3.1版出来了,那时候真心动莫名,爱死微软了,
终于拿到了点好东西,偏偏企业库用起来极度繁琐,配置信息既多又烦,
而且我就只要数据库操作嘛,
于是不知道怎么的居然被我找到了AdoHelper(改版自微软企业库) 。这丫既小,使用又方便。像极了SqlHelper,AccessHelper,最主要是
终于可以跨数据库了!
不久系统要改版了,AdoHelper的缺点也慢慢暴露出来了,
复杂的函数,用起来极度不方便。
还不如多写几套System.Data.SqlClient, System.Data.Oledb, System.Data.Odbc来得快。
事务处理方面也是个笑话。
互联网是广阔的,开源的数据库组建躲如牛毛,
优秀的也比我们写过的系统还多很多。
可是真用的时候总是力不从心,要不用起来太烦, 要不配置太烦,要不干脆没有自己想要的功能。
nhibernate一直是想用的,不过每次看到教程就觉得很烦,这东西学起来烦死,所以最终还是没有深入研究。
sobsonic是看得最多用得最多的组建了。优秀的地方很多。
可是开发的时候总局得多了什么东西似的,总觉得那不是自己的系统。
思路:
回想起当初开发asp,开发php时候,
有时候会想,其实那种思路会不会更舒服些呢,
或者说更符合我自己呢,
open, close, begintransaction, rollback commit
其实每个页面写一次有什么不好?
配置:
配置比较简单就connectionstring那里设置一下(支持mssql,mysql,sqlite,odbc,oledb...)
<add name="TianvCms" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|TianvCms.mdb" providerName="System.Data.OleDb"/>
结果:
代码大家都会, 我就不班门弄斧了,
贴一段代码出来大家看看这样会不会很奇怪:
Code
using System;
using System.Data;
using System.Web;
using Tianv.DBUtility;
using Tianv;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (DB db = new DB("TianvCms"))
{
SqlQuery sqlQuery = new SqlQuery()
.Select(tianv_news.Columns.id)//, tianv_news_type.Columns.title, tianv_news.Columns.title, tianv_news.Columns.click
.From(tianv_news.Table)
.LeftOuterJoin(tianv_news_type.Columns.id, tianv_news.Columns.typeid)
.Where(tianv_news.Columns.id).IsBetweenAnd(10, 170)
.And(tianv_news.Columns.click).IsGreaterThan(0)
.OrderDesc(tianv_news.Columns.id)
.Paged(2, 1)
;
SqlQuery sq = new SqlQuery()
.Delete()
.From(tianv_news.Table)
.Where(tianv_news.Columns.id).In(sqlQuery)
.And(tianv_news.Columns.id).IsGreaterThan(1)
;
db.BeginTransaction();
tianv_news news = db.ExecuteList<tianv_news>("select * from tianv_news where id>90 and id<92 ")[0];
news.title = "hoho";
tianv_news_controler.Update(db, news);
tianv_news temp = tianv_news_controler.Select(db, news.id);
Response.Write(temp.title + "<br />");
db.Rollback();
tianv_news temp2 = tianv_news_controler.Select(db, news.id);
Response.Write(temp2.title + "<br />");
resultStr.InnerHtml = sq.ToString(db.Database);
GridView1.DataSource = db.ExecuteList<tianv_news>("select * from tianv_news ");// db.ExecuteReader(sqlQuery);// newss;
GridView1.DataBind();
}
}
}
运行结果(GridView太大就不贴了):
Sql Query Result:
hoho
全球网站超1.08亿 微软IIS份额提升
Code
DELETE
From
[tianv_news]
WHERE
[tianv_news].[id] IN (SELECT TOP 1
[tianv_news].[id]
From
[tianv_news] LEFT OUTER JOIN
[tianv_news_type] ON ( [tianv_news_type].[id] = [tianv_news].[typeid] )
WHERE
[tianv_news].[id] BETWEEN @tianv_news.id_start AND @tianv_news.id_end AND [tianv_news].[click] > @tianv_news.click
AND [tianv_news].[id] NOT IN (SELECT TOP 1 [tianv_news].[id] From [tianv_news] LEFT OUTER JOIN [tianv_news_type] ON ( [tianv_news_type].[id] = [tianv_news].[typeid] ) WHERE [tianv_news].[id] BETWEEN @tianv_news.id_start AND @tianv_news.id_end AND [tianv_news].[click] > @tianv_news.click ORDER BY [tianv_news].[id] DESC)
ORDER BY
[tianv_news].[id] DESC) AND [tianv_news].[id] > @tianv_news.id