if(s[i].Length>0)
{
myada.InsertCommand=new OleDbCommand(s[i],mycnn);

}


              }
                            myada.Update(ds,"one");
-------------------------------------------------------------------------
if(s[i].Length>0)
{
myada.InsertCommand=new OleDbCommand(s[i],mycnn);
myada.Update(ds,"one");
}


              }
                            

解决方案 »

  1.   

    因为没有6个myada.InsertCommand,这个属性只能有一个值,好像
    int a=123; a=54645 ; a=....    无论你对他赋值多少次它的值只能是最后一个
      

  2.   

    通过DataAdapter执行数据更新时,需要配置DataAdapter中的InsertCommand,这点你已经实现。下面的内容是InsertCommand的CommandText的问题了。经过你的6次循环后,最后一个生成InsertCommand的CommandText是最后一次循环的SqlString,即s[5]:"INSERT INTO 个人信息(姓名)VALUES('朱5')";虽然你生成了6个InsertCommand,但前面的都被后面的“覆盖”了,只有最后一个才是DataAdapter的有效的InsertCommand,所以最后执行的INSERT命令的SQL语句就是s[5]的SQL字符串了,从而导致你插入的数据只能是最后一条记录。至于能插入6条,是因为你的TABLE中有6条新记录,所以DataAdapter会很“聪明”的判断每条记录,如果该记录在TABLE中没有就执行一次INSERTCOMMAND,从而执行了6次。解决:
    不要把InsertCommand放在循环中,而是在循环外面设置,比如循环后,而且INSERTCOMMAND的COMMANDTEXT也要修改,通过参数的形式来实现。至于该如何实现有效的INSERTCOMMAND,你可以通过相应的SELECTCOMMAND的COMMANDTEXT来生成:OleDbCommandBuilder cb=new OleDbCommandBuilder(myada);
    myada.InsertCommand=cb.GetInsertCommand();
      

  3.   

    首先在DataTable中添加新记录。
    然后创建一个参数化Insert语句并赋值给myada.InsertCommand。
    最后使用myada.Update方法。
      

  4.   

    你这条语句写得不对。
     s[i]="INSERT INTO 个人信息(姓名)VALUES('"+newrow[1].ToString() +"')";一般只要写成"insert into 个人信息(姓名) values(:姓名)"就可以了。
    注意,DotNet这种传参的写法有几种,上面这种是Oracle数据库的用法,好像Oledb也是这种用法(忘了)还有一种是:
    insert into 个人信息(姓名) values(@姓名) (常用于Sql Server)
    insert into 个人信息(姓名) values(?)  (这是通用的,不过用这种方法时,你DataTable的字段必须知道个数和顺序!