未处理的“System.InvalidOperationException”类型的异常出现在 system.data.dll 中。其他信息: 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。
*************************************
上面为报错信息;下面为源代码
*************************************
SqlConnection thisConnection=new SqlConnection( @"Server=30.5.20.15;"+
"user id=myuser;"+
"password=myok;"+
"Connection Timeout=10;"+
"Database=shly;");
SqlDataAdapter da =new SqlDataAdapter ();
da.SelectCommand =new SqlCommand ("select * from mytable",thisConnection);
DataSet ds =new DataSet ();
da.Fill (ds,"mytable");
DataTable dt=ds.Tables ["mytable"];
dt.Rows [0]["firstName"]="JuLian";
SqlCommandBuilder sqlCb=new SqlCommandBuilder (da);
da.Update (ds,"mytable");

解决方案 »

  1.   

    dt.Rows [0]["firstName"]="JuLian";
    这句,你确认dt.Rows.Count > 0 ??
      

  2.   

    首先,调用update,你的SqlDataAdapter就必须要有updatecommand语句,
    错误提示已经告诉你了,“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”,因为数据库中你要更新的表没有主键,所以并没有updatecommand语句,
    手动添加updatecommand语句,或者再数据库中添加主键,然后重新建立SqlDataAdapter,生成updatecommand语句。
      

  3.   

    这样有时候有问题,
    楼主定义了da及其select命令方法,但是没有定义update语句方法。
    把你update语句写上去写全,别用da.Update (ds,"mytable");用类似SqlupdateCommand.ExecuteNonQuery();之类的试试。
      

  4.   

    使用SqlCommandBuilder ,数据表必须要设置主键才可以更新
      

  5.   

    我已经设置了主键,不然我插入insert为什么会成功呢,另我的主键是中文字段,会有影响?