对于你的例子,你不执行:
selectcommand. ExecuteNonQuery();
效果是一样的ExecuteNonQuery只是执行SQL语句,而不返回数据集之所以你的DataSet里面被填充了数据,是因为你的da利用了selectcommand来执行ExcuteReader返回一个DataReader,这个DataReader包含了查询的数据,da会把这些数据填充到DataSet,然后释放Reader,所以DataSet的数据是本地的

解决方案 »

  1.   

    用da.Fill()时不需要selectCommand.ExecuteNonQuery();
    你用ExecuteNonQuery()执行时他已经把数据填入到customers中去了,你再用fill,实际上
    执行的是同一个操作,只是填充的表不同而已,当然我出现“表里的结构和数据完全等同于 customers的情况“。
      

  2.   

    楼上的关于ExecuteNonQuery的说法是完全正确的,关于你的shortname表不懂,奇怪~关注中
      

  3.   

    你Fill了两次,表的名字又不一样,当然在DataSet中有两个表了
      

  4.   

    ExecuteNonQuery();一般是用来操作如delete, update, insert等sql语句的
    而select一般用fill
      

  5.   

    da.SelectCommand=sltcommand;
    sltcommand.CommandText=”Select distinct shortname from 
    customers”;
    sltcommand. ExecuteNonQuery();
    da.Fill(this.dataset1,"shortname");
      

  6.   

    那我想將以下兩個command的結果放在同一dataset中應該如何做selectcommand.CommandText=”Select * from customers”;
    sltcommand.CommandText=”Select distinct shortname from customers”;
      

  7.   

    ExecuteNonQuery()只是对SqlCommand的简单调用,不对你的DataTable产生影响。
    Fill()执行很多操作,打开相关的SqlConnection,执行SqlCommand,并将返回的数据填入Dataset的相应DataTable中。如果用了Fill(),不需要执行ExecuteNonQuery(),它会将数据填入你参数指定的DataTable里,如果这个名字的DataTable不存在,它将创建一个DataTable。
      

  8.   

    ExecuteNonQuery()方法是用来执行Sql语句的,在这里不用,因为你的命令对象是适配器
    (如OleDbDataAdapter)中的一个命令属性,在执行Fill()方法时,会根据你的命令来填充数据集,
    参数如果只有一个参数(数据集)那么会生成或填充已经存在的和你的from 的表相同名的DataTable放到数据集中,如果有两个参数,第二个参数是表的别名(在数据集中区别别的表),那是在数据集中真正的表名,和数据库中表名没有直接关系,只是一个映射吧,所以你两次填充,虽然是访问的数据库中同一个表,但是你用了两个别名所以 产生了两个DataTable但是结构和数据基本上是相同的