SqlConnection con=new SqlConnection("packet size=4096;user id=sa;data source='192.168.0.3';persist security info=True;initial catalog=MarkDB;password='pass'");
con.Open();
/*SqlCommand com=con.CreateCommand();
com.CommandText="SELECT MB001,MB002,MB003 FROM AAAMB";
SqlDataReader read=com.ExecuteReader();
while (read.Read())
{
Console.WriteLine("\t{0}\t{1}",read["MB001"],read["MB002"]);
}
read.Close();
//con.Close();
Console.ReadLine();*/
SqlDataAdapter adapter=new SqlDataAdapter("select MB001,MB002,MB003 FROM AAAMB",con);
SqlCommandBuilder bui=new SqlCommandBuilder(adapter);
DataSet dataset=new DataSet();
adapter.Fill(dataset,"AAAMB");
Console.WriteLine("name before change:{0}",dataset.Tables["AAAMB"].Rows[0]["MB002"]);
Console.ReadLine();
dataset.Tables["AAAMB"].Rows[0]["MB002"]="aaaaaaa";
adapter.Update(dataset,"AAAMB");
Console.WriteLine("name before change:{0}",dataset.Tables["AAAMB"].Rows[0]["MB002"]);
Console.ReadLine();在运行时提示adapter.Update(dataset,"AAAMB");有错误。为
未处理的“System.InvalidOperationException”类型的异常出现在 system.data.dll 中。其他信息: Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.请问要怎么才行?小弟刚学,请各位大哥指点

解决方案 »

  1.   

    SqlDataAdapter adapter=new SqlDataAdapter("select MB001,MB002,MB003 FROM AAAMB",con);
    //请确保MB001,MB002,MB003其中有一个主键, 即在Select语句中选出的列中需要存在一个主键才能使用SqlComamndBuilder
      

  2.   

    使用SqlComamndBuilder进行更新时Select的字段中必须包含数据表主健字段,否则不能更新.
    从系统的提示信息上看你的MB001,MB002,MB003 FROM AAAMB几个字段中肯定没有主健字段,所以不能用SqlComamndBuilder来进行更新.
    要更新没有主健字段的数据表,你应该用Update关健字来构造SQL指令,然后用ExecuteNonQuery来执行更新查询
      

  3.   

    dbspro(冷锋) :
    是没有主键,请问”你应该用Update关健字来构造SQL指令,然后用ExecuteNonQuery来执行更新查询
    “能否给出列子,谢谢!
      

  4.   

    写个Update的SQL语句,然后调用ExecuteNonQuery执行:string sSql = "UPDATE AAAMB SET MB002= 'aaaaa'";
    SqlCommand sqlCmd = new SqlCommand(sSql,conn);
    sqlCmd.ExecuteNonQuery();