其他信息: Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.

解决方案 »

  1.   

    原来select出的datatable里要有主键,不然不能update
      

  2.   

    是不是用SqlCommandBuilder自动生成SqlDataAdapter的更新语句的?
    检查一下SqlDataAdapter的SelectCommand,
    或者把代码贴出来.
      

  3.   

    public void SelectAttend()
    {
    myDBConn = new DBConncetion();
    SQL.SqlConnection dbConn = myDBConn.DBConnect();
    string attDate = this.attendDate.Year.ToString() + "-" + this.attendDate.Month.ToString() + "-" + this.attendDate.Day.ToString();
    string sqlStr = string.Format("SELECT employee_quantity as 编制人数,att_emp_quantity as 出勤人数," + 
    "worktime as 上班小时,addtime as 加班小时,servicetime as 支援小时,dept_workedtime as 小组工时 FROM Attendance_js " + 
    "WHERE dept_id = '{0}' AND convert(char(10),created_time,120) = '{1}'",
    this.deptID,attDate);
    myComm = new SQL.SqlCommand(sqlStr,dbConn);
    SQL.SqlDataAdapter dbAdapter;
    dbAdapter = new System.Data.SqlClient.SqlDataAdapter(myComm);
    ds = new SD.DataSet(); dbConn.Open();
    dbAdapter.Fill(ds);
    dbConn.Close();
    } public void UpdateAttend()
    {
    SQL.SqlConnection  dbConn = null;
    SD.DataSet         ds     = null;
    myDBConn = new DBConncetion();
    dbConn = myDBConn.DBConnect();
    string attDate = this.attendDate.Year.ToString() + "-" + this.attendDate.Month.ToString() + "-" + this.attendDate.Day.ToString();
    string sqlStr = string.Format("SELECT employee_quantity as 编制人数,att_emp_quantity as 出勤人数," + 
    "worktime as 上班小时,addtime as 加班小时,servicetime as 支援小时,dept_workedtime as 小组工时 FROM Attendance_js " + 
    "WHERE dept_id = '{0}' AND convert(char(10),created_time,120) = '{1}'",
    this.deptID,attDate);
    myComm = new SQL.SqlCommand(sqlStr,dbConn);
    SQL.SqlDataAdapter dbAdapter;
    dbAdapter = new System.Data.SqlClient.SqlDataAdapter(myComm); SQL.SqlCommandBuilder  dbCmdBuilder;
    dbCmdBuilder = new SQL.SqlCommandBuilder(dbAdapter); ds = (SD.DataSet) this.dataGrid1.DataSource; dbConn.Open();
    dbAdapter.Update(ds);
    dbConn.Close(); SWF.MessageBox.Show("Changes saved!");
    }