题外:

上次发的组建被扔到新手区以后久久不敢发帖,

抗打击能力确实比较糟糕 请教新设计的数据库组建, 关于跨数据库的一点心得, 大家一起讨论一下

这次希望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"/>


结果:

代码大家都会, 我就不班门弄斧了,

贴一段代码出来大家看看这样会不会很奇怪:

 

 _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(
10170)
                .And(tianv_news.Columns.click).IsGreaterThan(
0)
                .OrderDesc(tianv_news.Columns.id)
                .Paged(
21)
                ;

            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份额提升


    [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] DESCAND [tianv_news].[id]  >  @tianv_news.id

相关文章:

  • 2021-03-27
  • 2022-01-03
  • 2022-01-01
  • 2021-12-27
  • 2021-11-17
  • 2021-10-08
  • 2021-10-01
  • 2021-12-01
猜你喜欢
  • 2022-12-23
  • 2022-01-17
  • 2022-12-23
  • 2021-12-31
  • 2022-12-23
  • 2022-12-23
  • 2021-05-04
相关资源
相似解决方案