Zhangxd's code life

博客园 首页 新随笔 联系 订阅 管理
  3 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

2008年3月20日 #

MS这样说:


可以这样理解:在一个连接之上,对于rand(100),每次调用的返回结果一致。在一次查询中,只要使用一个种子调用rand,那么这个查询中的其他rand调用,都将基于(rand(100))的返回结果生成结果。但并不是使用rand(100)的结果作为种子。

看MS所说的:rand()的所有后续调用将基于使用改指定种子值的rand()调用生成结果

这样解释是否有点牵强?:)

可以下面的语句多次调用,进行测试:

select rand(), rand();

select rand(), rand(), 100


select rand(100), rand(), rand()

select rand(), rand(), rand(100)

select rand(), rand();
select rand(), rand(), rand(100)

注意:颜色一致的sql请在一个查询中,一起执行..




posted @ 2008-03-20 19:17 zhangxd 阅读(24) | 评论 (0)编辑

2008年3月19日 #

请先看下下面两张图片:

对于Rand, MS的帮助上这样说:


我实际的执行结果:



看我执行的结果,并不像帮助文档上所说:产生相同的数字序列..

请问:这个应该怎么解释?

posted @ 2008-03-19 17:49 zhangxd 阅读(70) | 评论 (0)编辑

2008年3月12日 #

通常我们在写DAO的时候,一般会根据功能去写类似的下面这样的东东:

// Post数据库操作的Dao
public class PostDao
{

    // 保存Visitor提交的一个Post
    public void savePost(PostDataBean myPostDataBean)
    {
        // 获得数据库连接,保存数据
        
    }

    // 根据主键删除一条Post
    public int deletePost(string postPk)
    {
        // 获得数据库连接,删除数据
        //.....
    }
}

// trace Visitor 的Dao
public class VisitorTraceDAO
{
    public void SaveVisitorTrace(VisitorTraceDataBean traceDataBean)
    {
        // 获取数据库连接,保存数据
    }

    public  VisitorTraceDataBean[] getTraceDataBean(VisitorTraceDataBean condition)
    {
        // 获取数据库连接,查询数据,返回
    }

}
现在的业务情景是:一个Visitor提交了个Post, 系统需要保存,但同时,我们也需要在后台把这个Visitor的来源统计信息保存至数据库。所以我们通常会有这样的代码:
public class XXXDomain
{
    // 这个方法的操作需要事务
    public void SaveVisitorVisitInfo(PostDataBean postDataBean, VisitorTraceDAO traceDataBean)
    {
        PostDao postDao = new PostDao();
        postDao.savePost(postDataBean);
        
        VisitorTraceDAO VTDao = new VisitorTraceDAO();
        VTDao.SaveVisitorTrace(traceDataBean);
    }

}
现在的问题是:如何保证postDao.savePost(postDataBean); 和 VTDao.SaveVisitorTrace(traceDataBean); 是在一个事务里面呢?
这种情况,大家一般都是怎么做的?有没有一种优雅的解决方案,在不使用任何框架的情况下。这个问题仅限于.NET范围内.
posted @ 2008-03-12 20:12 zhangxd 阅读(21) | 评论 (0)编辑