这几天做access + .net2.0项目的一些心得

原创 2006年06月06日 21:16:00

项目要求比较简单,可做的时候发现,并没有想像中的那样顺手,在一些细节上还是费了不少功夫,所以有必要记录一下。
1. OleDb的参数构造
数据库是access,连接使用传统的.OleDb。OleDbCommand对象,不支持命名参数,一律用问号占位,给它的参数赋值的时候,一定要对应问号的顺序的,当然,也可以给参数命名,不过没什么用,这里只认顺序。可以用循环的方式创建Parameters,注意的是这里OleDbParameter()是一个没有任何参数的构造,当然也可以使用更复杂的构造,但这里没有参数名称,所以就用最简单的构造了。

OleDbParameter (String, OleDbType) 初始化使用参数名称和数据类型的 OleDbParameter 类的新实例。
OleDbParameter (String, OleDbType, Int32) 初始化使用参数名称、数据类型和长度的 OleDbParameter 类的新实例。

       cmd = new OleDbCommand(cmdStr, conn);
        for (int i = 0; i < 4; i++)
        {
            cmd.Parameters.Add(new OleDbParameter());
        }
        cmd.Parameters[0].Value = txtTopic.Text;
        cmd.Parameters[1].Value = txtOrigin.Text;
        cmd.Parameters[2].Value = fbContent.Text;
        cmd.Parameters[3].Value = this.CatalogID;

2.奇怪的“like”
以前做asp项目的时候,也用access数据库,从来没有觉得模糊查询有什么问题。
用OleDbCommand对象操作查询,用参数的方式(注意%前后的单引号),没有问题
           cmdStr = "select count(newsid) from [news] where  and newstopic like '%'+ ? + '%'";
            cmd = new OleDbCommand(cmdStr, conn);
            cmd.Parameters.Add(new OleDbParameter());
            cmd.Parameters[0].Value = Keyword;

传统的变量拼接查询字符串(单引号和上面不太一样),也ok
            cmdStr = "select count(newsid) from [news] where  and newstopic like '%"+ Keyword + "%'";
            cmd = new OleDbCommand(cmdStr, conn);

不用参数,不用变量,直接写,查不到!
            cmdStr = "select count(newsid) from [news] where  and newstopic like '%新闻%'";
            cmd = new OleDbCommand(cmdStr, conn);
直接在access2003建一个查询,输入
select count(newsid) from [news] where  and newstopic like '%新闻%'
还是查不到
%换成*,access中可以查出正确的结果
select count(newsid) from [news] where  and newstopic like '*新闻*'
但为了考虑程序的兼容性,我没有试验*的效果。究竟是为什么上面的问题,查了一些资料也没有清楚的解释。建议用第一种参数传入的方式,这样可以避免注入,比较保险。

3.页面中的持久量。
所谓持久量,主要是一些在页面生存周期中,一直存在并且值固定的量。最常用的一个例子是,页面获取从url传来的参数,如ID号。最早我是使用static变量来保存这个值,在page_load()中给它赋值,值就一直保存在内存中。这是最简单的方法,但在并发时有一定风险。后来改用viewstate来保存,可能我比较懒,觉得每次都用viewstate["XXX"]这样方式,很多时候还需要判定是否为null,还有一些类型转换,用起来比较麻烦。我想,是否可以定义一个只读属性来存储这个量,试验了一下还不错,这样也符合面向对象的思想。
    public int CatalogID
    {
        get
        {
            if (Request.QueryString["id"] != null)
                return Int16.Parse(Request.QueryString["id"]);
            else
                return -1;
        }
    }
这样页面中任意位置都可以调用CatalogID 了。

4.Repeater 中的OnItemCommand事件
我在Repeater中放置了几个按钮,也注册了OnItemCommand事件,可点击按钮以后却没有达到预期的效果,设置断点,发现点击按钮的时候根本没有进入处理事件的方法,百思不得其解。在论坛上查了一下,终于找到解决方法,page_load()方法里,如果控件被绑定之前没有判定IsPostBack,注册的OnItemCommand就不起作用。引用网上的一段资料
  ------“注意如果我们每次在页面装载时均将数据绑定至DataGrid(也就是说我们省略了If Not Page.IsPostBack检查)detailsClicked事件处理程序将不会执行,因为重新绑定DataGrid将会清空(flush out)ItemCommand事件。(请重新阅读上面的两段文字-根据各位对DataGrid的了解,你们很有可能忘记执行回发检查并导致DataGrid不能触发针对按钮的事件处理代码。相信我,这件事在我身上多次发生!J)
总之page_load()中,重新绑定数据,控件上的事件就没有了!

5.关于masterpage.master
2.0中的masterpage是一个好用的东东,但是要注意合并后页面执行事件的先后顺序
  1. 母版页控件 Init 事件。
  2. 内容控件 Init 事件。
  3. 母版页 Init 事件。
  4. 内容页 Init 事件。
  5. 内容页 Load 事件。
  6. 母版页 Load 事件。
  7. 内容控件 Load 事件。
  8. 内容页 PreRender 事件。
  9. 母版页 PreRender 事件。
  10. 母版页控件 PreRender 事件。
  11. 内容控件 PreRender 事件。

母板页中的控件ID,到了客户端以后也有变化,比如母板页上的按钮id为bnPost,到客户端成了ct100_$bnPost,
这个客户端id可以用ClientID属性来找,需要在客户端做数据验证的时候一定要注意。当然这里用验证控件不会有问题,但我还是比较喜欢自己写客户端验证。

6.ClientScriptManager.RegisterClientScriptBlock 方法
以前1.1有page.RegisterClientScriptBlock 方法来包装脚本,但2.0中已经过时,统一用ClientScriptManager来处理脚本。
public void RegisterClientScriptBlock (
 Type type,
 string key,
 string script,
 bool addScriptTags
)第一个参数,我也没搞太清楚,反正用的时候一律this.GetType()就搞定,第二三个参数和以前一样没什么好说的,RegisterClientScriptBlock其中一个重载方法,就只包括了这三个参数,为什么我要列出4个参数的方法呢,addScriptTags如果为true,就会自动加上<scirpt language="javascript"></script>标记了,是不是很方便呢?

该不该和教师一起去做项目

【来信】   我先将这个具体情况讲一讲。我系的一位教过我课的老师接了一个项目,现在再学生去完成。   老师接的项目是要求用C#.Net、数据库方面的知识去做的。我自己现在正在学习《传智播客》免费提...
  • sxhelijian
  • sxhelijian
  • 2016年02月28日 22:00
  • 3763

动态UI心得一(CSharp)

在工作了一定时间之后,你会发现静态 UI 实在是让人受不了了!!! 所以接下来,我将对动态UI进行研究,给自己的工作时间予以肯定,以及提高兴趣。 1.展开折叠,在展开或收起控件时的动画效果。 2.进...
  • coconut9325
  • coconut9325
  • 2017年05月22日 18:19
  • 103

做项目的一点心得

界面方面 1. 界面要做的简约清爽,让客户能快速上手 2. 配置功能设计 如果涉及很多配置,建议放置到一行。如果配置功能太多,则减少显示行的信息,通过提供详情页进行显示。 名称 |...
  • u010503822
  • u010503822
  • 2017年10月11日 00:13
  • 70

C语言游戏项目感想

C语言游戏项目感想           到今天项目已经做了一半了,虽然是做的一个小游戏,但对我这个从来没有做过C语言小游戏的我 来说还是非常难 的。而且我的C语言学习的不是太好。现在一做项目就发现...
  • sjkyzmyqm
  • sjkyzmyqm
  • 2015年12月22日 11:26
  • 169

接手别人项目,自己的心得。

1 小的,基础的类可以直接看,而不需要debug进去,因为里面不涉及到什么业务逻辑,可以很快看懂。2 看别人的项目,还是要集中时间来看,否则,本来就不是自己写的,可能就记忆不清楚。很像“蜗牛爬井”。3...
  • tuwen
  • tuwen
  • 2010年03月04日 17:35
  • 958

初学如何构建一个小型项目的流程与心得

这篇博客我来说说我的看法,对于怎样合理的
  • u013132035
  • u013132035
  • 2016年12月02日 23:41
  • 439

谈谈第一次Web项目的感想(上)

整个Web项目开始大概三个星期左右,是一个老师众多题目中选的一个,旅游指南系统。   由于实际开发项目周期很短,又是学校里面的实验项目,缺少项目测试部分。   这次也仅仅是谈一下,自己对于整个We...
  • shixuan2205
  • shixuan2205
  • 2017年01月01日 06:51
  • 645

第一次项目发布的心得体会

昨晚, —— 不, 应该是今天凌晨, —— 注定是个不简单的时刻。 我入职后参与的第一个项目发布,而且自己所做的工作是数据订正,涉及用户数据的操作总是非常敏感而重要的。因此,心理还是比较紧张的。 果然...
  • shuqin1984
  • shuqin1984
  • 2012年08月24日 19:39
  • 1260

我参与的一个项目的继续总结:经验篇

这篇文章主要是从前面文章发的牢骚出发,提炼一些的事,当做是经验。
  • subfate
  • subfate
  • 2015年09月03日 23:25
  • 559

近期项目的一些心得

1.关于不同部门协作     (1)要配合对方的工作,大家建立好合作的基础。     (2)尽量将一些其他部门能够主导的工作交给对应部门,通过产品进度来推进。                  比如...
  • hzhiyang84
  • hzhiyang84
  • 2017年03月04日 05:27
  • 188
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:这几天做access + .net2.0项目的一些心得
举报原因:
原因补充:

(最多只允许输入30个字)