本人学.net不久,由于没有师傅带很多都是靠自学,有些问题拿捏不准,有时候因为别人的一句话我就会怀疑自己以前的做法是否正确,刚学.net时喜欢用sqldatasource这个控件来绑定数据,但后来发现页面里绑了很多加载变慢,后来直接在cs页面里写绑定函数,所有的数据查询通过这个函数实现,再后来把所有数据库操作写到一个类库里,用时直接使用返回的datatable!
  但是最近我们老大(他是delphi程序员)和我讲了一件事,他说在delphi里面数据库操作更不用我这么麻烦,几句话就可以搞定了,这让我彻底怀疑自己的做法是否正确,又重新回去研究sqldatasoure控件但是始终没发现其中的奥妙,希望高人指点下
  另外我在使用参数式写法时感觉代码增加很大,以前的思路是直接写sql语句然后统一放到一个执行函数即可,但是如果用参数写法这就意味着在函数内部就必须执行,本人修行很短,希望大家有好的方法多多分享!

解决方案 »

  1.   

      个人觉得,对数据库的操作像连接、读取...放在一个类库比较好,至于sql语句用参数,维护起来容易一些吧。
      

  2.   

    先学petshop入个门再看!!!!!!!!!!
      

  3.   

    我现在学习的V5SHOP程序!V5SHOP没有使用参数写法,他最后使用的是关键字屏蔽好像,但是我们老大说参数式写法是最规范的写法!
      

  4.   


    里面的SQL语句可以说用得很优雅,可以参考模仿使用StringBuilder, 这样可以减少sql语句重复
      

  5.   

    使用存储过程,petshop这个里边基本就是拼SQL不好
      

  6.   

    参考(创建自己的类库):
    http://www.cnblogs.com/insus/articles/1418377.html#2086143
    进级版:http://www.cnblogs.com/insus/articles/2030985.html
      

  7.   

    自己在程序里构建,不需要控件的
      string strconn = ConfigurationManager.AppSettings["DB01"];
                SqlDataAdapter sqlAdapt = new SqlDataAdapter();
                SqlConnection cn = new SqlConnection(strconn);
                SqlDataAdapter Da1 = new SqlDataAdapter();
                cn.Open();            SqlCommand sqlcmd = new SqlCommand();
                sqlcmd.Connection = cn;
      

  8.   


    搜索一下SqlHelper 就知道了
      

  9.   

    百度sqlhelper
    你也可以百度动软代码生成器,看看生成的样子,学习李老师
      

  10.   

    sqlhelper原理上讲实际也是将sql执行集中到几个函数当中!这样理解的话将数据操作集中一个类库中操作应该是最规范!
      

  11.   

    我们公司很少写底层代码,从配件库拉一个框架,底层的东西都封在DLL里面,不用写sql语句什么的,用的时候直接调用,传参数进去就行了。我用反编译工具看了下,是所谓的-声明式查询,有以下优点:
    1、隐匿查询时繁琐的T-SQL语句拼接,由解析器集中处理
    2、尽可能的统一查询时使用条件实体
    3、防止SQL注入
    4、与快速开发工具集成,对于单表查询无需开发
    如:[SelectFromClause("Project")]
    [SortableColumn("Sequence", SortDirection.Asc)]
    public sealed class ProjectCondition : QueryableObject
    {
               [QueryableColumn("Name", DbType.String, Operator.Like)]
               public String Name { get; set; }
               [QueryableColumn("CreatorUID", DbType.String, Operator.Like)]
               public String CreatorUID { get; set; }
               [QueryableColumn("StartTime", DbType.DateTime, Operator.GreaterThanOrEqual, null, "CreateTimeRange", 0)]
               public Nullable<DateTime> StartTime { get; set; }
               [QueryableColumn("EndTime", DbType.DateTime, Operator.LessThanOrEqual, null, "CreateTimeRange", 1)]
               public Nullable<DateTime> EndTime { get; set; }
               [QueryableColumn("Suspended", DbType.Boolean, Operator.Equal, null)]
               public Nullable<Boolean> Suspended { get; set; }
    }上面代码等价于:SELECT * FROM Project WHERE [Name] = Value AND [CreatorUID] = value AND ([StartTime] >= Value AND [EndTime] <= Value) AND [Suspended] = Value ORDER BY [Sequence] ASC