请先看下面的代码( DataSet1为一强类型DataSet. )
DataSet1 ds1 = new DataSet1(); SqlConnection conn = new SqlConnection();
conn.ConnectionString = @".....";

conn.Open(); SqlCommand comm = new SqlCommand();
comm.CommandType = CommandType.Text;
comm.CommandText = "select * from article where ariticle_id < 0";//这里!让选择的结果集为空是可行的! 这样可以提高效率。但是这个语句一定要写,还不能写为"",并且要把结果Fill到ds1中。
comm.Connection = conn; SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = comm; SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

adapter.Fill(ds1,ds1.Article.TableName);
DataSet1.ArticleRow drNew = ds1.Article.NewArticleRow();
drNew.Ariticle_ID = int.Parse(this.TextBox1.Text);
drNew.User_ID = int.Parse(this.TextBox2.Text);
drNew.Title = this.TextBox3.Text;
drNew.Content = this.TextBox4.Text;
drNew.AddTime = DateTime.Now;
drNew.CheckTime = DateTime.Now;
drNew.ViewCount = int.Parse(this.TextBox5.Text); ds1.Article.AddArticleRow(drNew);
adapter.Update(ds1,ds1.Article.TableName);//插入或更新.问题是:1> 为什么还需要先select一个结果集,然后邦定到ds1,然后操作ds1,更新ds1?  
“先select一个结果集”:我们可以故意让结果为0条记录,既然这样,还需要这个作什么用?Ado.Net这样的设计,让人觉得不舒服!
2> 有其他通过DataSet刷新数据的“看起来比较正常的”方法吗?

解决方案 »

  1.   

    对这个还不太了解,也许是dataset设计有问题吧。强类型dataset还有很多不足或有问题的地方,建立dataset对象,跨表选择列更新的话一不小心就会违反非空约束。也许以后的版本会更完善。可以在dataset对象建立update(c1,c2,c3....)方法,这样就可以直接用了。
      

  2.   

    对于更新数据集,只能用adapter.而且你用SqlCommandBuilder builder = new SqlCommandBuilder(adapter);这样性能上会有很大的影响。