使用DataAdapter 和 DataSet
可以实现你要的效果
http://jsjx.hbhgzy.com.cn/xingwen/news_view.asp?newsid=134

解决方案 »

  1.   

    只是个人书写代码的习惯问题。            StringBuilder strSql = new StringBuilder();            strSql.Append("insert into TopWinCMS_Business (");
                strSql.Append("MemberID,Indent,PayMoney,Customer,[DateTime],Re,flag)");
                strSql.Append(" values (");
                strSql.Append("@MemberID,@Indent,@PayMoney,@Customer,@DateTime,@Re,@flag)");            OleDbParameter[] arrParameter = new OleDbParameter[7];
                arrParameter[0] = new OleDbParameter("@MemberID", OleDbType.Integer, 4);
                arrParameter[1] = new OleDbParameter("@Indent", OleDbType.VarChar, 50);
                arrParameter[2] = new OleDbParameter("@PayMoney", OleDbType.VarChar, 50);
                arrParameter[3] = new OleDbParameter("@Customer", OleDbType.VarChar, 50);
                arrParameter[4] = new OleDbParameter("@DateTime", OleDbType.Date);
                arrParameter[5] = new OleDbParameter("@Re", OleDbType.VarChar, 0);
                arrParameter[6] = new OleDbParameter("@flag", OleDbType.Integer, 4);            arrParameter[0].Value = model.MemberID;
                arrParameter[1].Value = model.Indent;
                arrParameter[2].Value = model.PayMoney;
                arrParameter[3].Value = model.Customer;
                arrParameter[4].Value = model.DateTime;
                arrParameter[5].Value = model.Re;
                arrParameter[6].Value = model.flag;
                using (AccBase MyBase = new AccBase())
                {
                    MyBase.MyExecuteNonQuery(strSql.ToString(), arrParameter);
                }
      

  2.   

    这篇排版好一些
    http://www.webjx.com/htmldata/2005-09-14/1126651729.html
      

  3.   

    我用不太严格的技术术语说一个要点:Recordset是基于游标操作概念设计的。游标操作会严重占有数据库联接资源,造成大量存取冲突。Recordset虽然直观,但是它推广的数据操作方法随随便便就让程序变得贪婪地霸占数据库资源。ADO.NET是基于“断开式”的SQL语言通讯协议来设计的。应用程序尽量避免与数据库的持续状态处理。比较一下DataTable、DataSet、DataView、DataRelation等System.Data命名空间中推广数据操作的对象,你会发现已经做好了很多好东西,程序可以顺利使用(与数据库的)离线方式处理数据。
      

  4.   

    必要的体力活是要做的,OleDbParameter[] arrParameter = new OleDbParameter[7],这样作出错的概率小些
      

  5.   

    用Parameter,既不容易出错,又安全(可以防SQL注入)。
      

  6.   

    我一般是写一个 方法来处理
    比如用Hashtable 
    Hashtable 是键值对,这样可以用Key来映射需要 操作的字段 用Value来存需要的值,
    写一个方法来处理 Hashtable,返回一个sql语句
      

  7.   

    再说明白点,你应该用Recordset与TableSet去对比,而和DBParameter没有必然的联系。ADO同样有Command、Parameter,参见:  http://doc.51windows.net/ado/?url=/ado/mdmthcreateparam.htmADO.NET保留了ADO中的这些。如果用ADO.NET的命令参数方式去与楼主的问题相比,就偏离了问题。实际上,DataSet、DBDataAdapter等一大堆ADO.NET里的新对象综合起来,为了取消Recordset而设计。Recordset确实使用方便,但是它的设计规格要求必须持续保持数据库联接,被认为是必须从“根上”纠正过来的概念。
      

  8.   

    你应该用Recordset与TableSet去对比  -->  你应该用Recordset与DataTable、DataSet去对比
      

  9.   

    ORM是个不错的选择。喜欢“微软技术”的人还可以关注DLinq和Linq。DLinq是对ADO.NET的扩展。不需要去搞什么 Hibernate,那只是对ADO.NET的拙劣替代,而不是扩展。
      

  10.   

    最后再强调一下,ADO.NET中包括DataSet、DataView、DataRelation、DBDataAdapter,不要忘记了。
      

  11.   

    看一下我的blog里面,有一个很好的解决方法。使用了我的数据访问层里的一个函数。http://blog.csdn.net/jyk/archive/2006/08/15/1067300.aspx5、  用InsertDataStr和UpdateData实现添加、修改新闻。同时用RunSqlExists判断新闻标题是否重复。//判断是修改还是添加bool isAdd = false;if (DG.SelectedIndex == -1)  //利用DataGrid的状态来判断是添加还是修改。     isAdd = true; //设定字段。这里一定要用一个数组来表示,这是 InsertDataStr 函数的参数的要求!string[] str1 = new string[2];str1[0] = "title";str1[1] = "Content";//可以增加其他的字段,增加字段只是“增加行数”。这里的两个字段只是做了一个事例。
     //获取用户输入的信息,并且过滤危险字符//这里一定要用一个数组来表示,这是 InsertDataStr 函数的参数的要求!string[] str = new string[2];str[0] = this.Txt_Title.Text.Trim().Replace("'","");str[1] = this.Txt_Content.Text.Trim().Replace("'","");#region 数据验证if (str[0].Length == 0 ){  Page.RegisterStartupScript("a",Functions.myAlert("请填写新闻标题!"));  return;} DataAccessLayer dal = new DataAccessLayer();if (isAdd){     if (dal.RunSqlExists("select top 1 '1' from news where title='" + str[0] + "'" ))     {       Page.RegisterStartupScript("a",Functions.myAlert("已经有这个新闻标题了!"));       return;     }}else{     if (dal.RunSqlExists("select top 1 '1' from news where title='" + str[0] + "' and NewsID <>" +  DG.SelectedItem.Cells[0].Text))     {       Page.RegisterStartupScript("a",Functions.myAlert("已经有这个新闻标题了!"));       return;     }}#endregionif (isAdd)     //添加新闻  dal.InsertDataStr("News",str1,str);else     //修改新闻  dal.UpdateData("News",str1,str," NewsID=" + DG.SelectedItem.Cells[0].Text); //检查是否出现异常if (dal.ErrorMsg.Length > 2 ){  Response.Write(dal.ErrorMsg );  //输出错误信息  return;}if (isAdd)     //添加成功。进行相应处理else     //修改成功。进行相应处理 
      

  12.   

    自己写个Sql生成器就行了,或者在实体上加对数据库的attribute信息,写个通用操作类就行了.
      

  13.   

    就算是在ASP中,我也不喜欢用游标来插入或者更新,一句INSERT或者UPDATE能做的事情没必要分开那么多句。现在在ASP.NET中,可以用ADO.NET,已经很方便了啊,可以用Parameters输入参数,不需要拼接字符串。
      

  14.   

    不需要去搞什么 Hibernate,那只是对ADO.NET的拙劣替代,而不是扩展。****************************************咋就这么别扭乜
    替代?应该是革新吧!ADO.NET的数据是OO的么?Nhibernate不易上手是事实,没必要这么喷吧
      

  15.   

    楼主只要能把Petshop里对ADO.NET的应用啃了就行其他的,以后慢慢来吧
      

  16.   

    推荐使用SqlHelper + 存储过程
    使用方便,思路清晰,还安全可靠
      

  17.   

    这些应该使用一个好的底层框架来自动处理,比如NBear.
      

  18.   

    http://www.webjx.com/htmldata/2005-09-14/1126651729.html
      

  19.   

    我觉得用存储过程配合xml方式处理应该不错。