ASP.NET 2.0 书籍点评系列 -- ASP.NET 2.0 数据库通用模块开发与系统移植

原创 2007年09月14日 18:07:00
书名:ASP.NET 2.0 数据库通用模块开发与系统移植 作者:施伟伟 王敬栋 编著 来源:清华大学出版社 出版时间:2007年05月 ISBN:9787302151401 定价:48元

评价结果:仅评样章,此书不值得购买

http://book.csdn.net/bookfiles/357/10035713753.shtml

先说说绑定代码

protected void Page_Load(object sender, EventArgs e)
{
    //读取数据库连接字符串
    string settings = Convert.ToString(ConfigurationManager.ConnectionStrings["SqlServices"]);

    //创建数据库连接
    SqlConnection myconn = new SqlConnection(settings);
    //打开数据库连接
    myconn.Open();
    string strsql="select * from Cat";
    //执行数据操作命令
    SqlDataAdapter da = new SqlDataAdapter(strsql,myconn);
    DataSet ds = new DataSet();
    da.Fill(ds,"CatName");
    ddl_cat.DataSource = ds.Tables["CatName"].DefaultView;
    ddl_cat.DataTextField = "CatName";
    ddl_cat.DataValueField = "CatID";
    ddl_cat.DataBind();
    myconn.Close();
    if (!IsPostBack)
    {
        ddl_cat.SelectedIndex = 0;
    }
}

问题:
1。大多数情况下,连接应该最晚打开,尽可能早地关闭。其实最好是用using块封装起来就不用手写关闭语句了(貌似只有 LoveCherry的ASP.NET第一步是这样做的)。

2。一般只在第一次从数据库绑定数据,以后的数据控件会从视图状态中自动读取。不判断IsPostBack 里去绑定数据效率很低

3。既然已经手写语句了,索性"Select CatID,CatName from Cat",不要的数据为什么去查询?

4。就目前的数据绑定,用DataReader就可以了,没必要用DataSet

可以改写为

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //读取数据库连接字符串
        string settings = Convert.ToString(ConfigurationManager.ConnectionStrings["SqlServices"]);
        //创建数据库连接
        SqlConnection myconn = new SqlConnection(settings);
        string strsql="select * from Cat";
        //执行数据操作命令
        SqlDataAdapter da = new SqlDataAdapter(strsql,myconn);
        DataSet ds = new DataSet();
        myconn.Open();
        da.Fill(ds,"CatName");
        myconn.Close();
        ddl_cat.DataSource = ds.Tables["CatName"].DefaultView;
        ddl_cat.DataTextField = "CatName";
        ddl_cat.DataValueField = "CatID";
        ddl_cat.DataBind();
        ddl_cat.SelectedIndex = 0;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string settings = Convert.ToString(ConfigurationManager.ConnectionStrings["SqlServices"]);
        using(SqlConnection myconn = new SqlConnection(settings))
        {
         string strsql="select CatID, CatName from Cat";
         SqlCommand mycmd = new SqlCommand(strsql,myconn);
         myconn.Open();
         ddl_cat.DataSource = mycmd.ExecuteReader(CommandBehavior.CloseConnection);
         ddl_cat.DataTextField = "CatName";
         ddl_cat.DataValueField = "CatID";
         ddl_cat.DataBind();
        }
        ddl_cat.SelectedIndex = 0;
    }
}

下面还一段

protected void btn_add_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        //读取数据库连接字符串
        string settings =Convert.ToString(ConfigurationManager.ConnectionStrings["SqlServices"]);
        //创建数据库连接
        SqlConnection myconn = new SqlConnection(settings);
        //打开数据库连接
        myconn.Open();
        string catname = ddl_cat.SelectedItem.ToString();
        int id = Convert.ToInt32(ddl_cat.SelectedValue.ToString());
        //测试用语句
        //Response.Write(catname);
        //Response.End();
        string name=tbx_proname.Text;
        string dec=tbx_dec.Text;
        string unit=tbx_unit.Text;
        string mf=tbx_mf.Text;
        string charge=tbx_charge.Text;
        int num = Convert.ToInt32(tbx_amount.Text.ToString());
        DateTime date =DateTime.Now;
 string strsql = "insert into products(CatID,ProName,Adddate,Unit,Stock, Total,Description,Promf,Charge)";
        strsql=strsql + "values (" + id +"," + "'" + name + "','";
 strsql=strsql + date +"','" + unit + "'," + num + "," + num + ",'" + dec + "','";
        strsql = strsql + mf + "','" + charge + "')";
        //创建数据库命令
        SqlCommand mycmd = new SqlCommand(strsql, myconn);
        //测试用语句
        //Response.Write(strsql);
        //Response.End();
        mycmd.ExecuteNonQuery();
        Response.Redirect("ProList.aspx");
    }
}

问题:

1。连接打开过早,而且没有关闭。

2。ddl_cat.SelectedValue和tbx_amount.Text肯定已经是string类型了,没有必要再ToString()一下?

3。用的是字符串拼接的方式,而不是用参数以防止0SQL注入。即使是字符串拼接,用StringBuilder类的Append方法而不是用字符串叠加效率会更好。一般向数据库里插入记录,如果是SqlServer,用getDate()比DataTime.Now好,区分清楚数据库服务器时间和Web服务器时间不是一个概念

可以改写为

protected void btn_add_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        //读取数据库连接字符串
        string settings =Convert.ToString(ConfigurationManager.ConnectionStrings["SqlServices"]);
        //创建数据库连接
        SqlConnection myconn = new SqlConnection(settings);

        string strsql = "insert into products(CatID,ProName,Adddate,Unit,Stock, Total,Description,Promf,Charge) values(@CatID, @ProName, getDate(), @Unit, @Stock, @Total, @Description, @Promf, @Charge)";
        SqlCommand mycmd = new SqlCommand(strsql, myconn);
        mycmd..Parameters.Add("@CatID", SqlDbType.Int).Value = int.Parse(ddl_cat.SelectedValue);
        mycmd..Parameters.Add("@ProName", SqlDbType.VarChar).Value = ddl_cat.SelectedItem.Text;
        //以下参数略

        myconn.Open();
        mycmd.ExecuteNonQuery();
        myconn.Close(); 
        Response.Redirect("ProList.aspx");
    }
}

就目前所写的代码,未看出和2.0有什么关系

ASP.NET通用模块及典型系统开放实例导航(网上书店管理系统)

  • 2008年11月06日 12:54
  • 1000KB
  • 下载

asp.net core 2.0 入门攻略 第一章 环境部署

一、首先大家先部署环境安装 因为大家当前是研究学习用途,所以建议大家使用VS社区版...
  • loongsking
  • loongsking
  • 2017年10月07日 09:40
  • 1327

两个 Asp.Net Core 2.0 项目共享登录

两个 Asp.Net Core 2.0 项目共享登录环境Win 7 64、IIS 7.5、VS 2017配置Startup.cs 中添加代码 // 添加 Cook 服务 services.AddA...
  • king_hh
  • king_hh
  • 2017年09月14日 14:35
  • 472

跟着老桂学ASP.NET Core 2.0

.net core作为微软开发技术中跨平台的利器,2.0的发布已经有一段时间了,asp.net core是新一代微软的BS开发框架,同时兼容.net core和.net framework,它的出现,...
  • sD7O95O
  • sD7O95O
  • 2017年11月24日 00:00
  • 420

ASP.NET Core 2.0 全局配置项

问题 如何在 ASP.NET Core 2.0 应用程序中读取全局配置项? 答案 首先新建一个空项目,并添加两个配置文件: 1. appsettings.json {  "S...
  • sD7O95O
  • sD7O95O
  • 2017年10月31日 00:00
  • 809

从头编写 asp.net core 2.0 web api 基础框架 (3)

比如说我们的ProductController,需要使用Mylogger作为记录日志的服务,MyLogger是一个在设计时指定的具体的类,这就是说ProductController对MyLogger有...
  • raintungl
  • raintungl
  • 2017年10月12日 13:45
  • 239

Asp.net Core + EF Core + Bootstrap搭建的MVC后台通用管理系统模板(跨平台版本)

6月随着.NET CORE PREVIEW2的发布,JUCHEAP 的CORE版本也由之前的JuCheap Core 1.0升级到了JuCheap Core 2.0,并且已经在将core版本应用到了生...
  • allenwdj
  • allenwdj
  • 2016年07月22日 10:33
  • 24612

【推介30本ASP.NET书,从入门到高级】

推介30本ASP.NET书 如果你是一个菜鸟或者自认为初学者那么本文非常适合你; 不能说这30本书就是最佳组合,但是可以说这个组合不差;本人曾博览群书,很多书重复,很多书讲的不适...
  • ruilan520
  • ruilan520
  • 2012年03月31日 14:17
  • 1416

Asp.Net Core 2.0 生成操作数据库文件需要的文件

开发环境 VS2017 + Win7 x64 生成操作数据库文件需要配置或添加的文件 1、Startup.cs public IConfiguration Configuratio...
  • king_hh
  • king_hh
  • 2017年12月29日 16:50
  • 125

一起学ASP.NET Core 2.0学习笔记(二)- ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、superviso...
  • daye5465
  • daye5465
  • 2017年08月31日 12:53
  • 2717
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET 2.0 书籍点评系列 -- ASP.NET 2.0 数据库通用模块开发与系统移植
举报原因:
原因补充:

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