当你的select语句涉及到几个表时一般是不能生成insert等语句的,但你可以在该数据适配器的属性中添加相应的insert等语句。

解决方案 »

  1.   

    多表是不能生成insert等语句的。
    这需要你自己写,
    SqlDataAdapter sda = new SqlDataAdapter();
    sda.InsertCommand.CommandText = mysql;
    ...
    ...
      

  2.   

    其实语句不用它自动生成,你可以写啊,它生成的语句中有很多是垃圾,特别是在Update,和Delete语句中,
    符合SQL标准,你可以看下面的例子,
    // 
    // sqlInsertCommand1
    // 
    this.sqlInsertCommand1.CommandText = "INSERT INTO person(name) VALUES (@name)"; 
    this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 5, "name"));// sqlUpdateCommand1
    // 
    this.sqlUpdateCommand1.CommandText = @"UPDATE person SET ExClassID = @ExClassID WHERE (name = @Original_name) ";
    this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ExClassID", System.Data.SqlDbType.VarChar, 5, "ExClassID"));// sqlDeleteCommand1
    // 
    this.sqlDeleteCommand1.CommandText = "DELETE FROM person WHERE (name = @Original_person)";
    this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_person", System.Data.SqlDbType.VarChar, 5, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "person", System.Data.DataRowVersion.Original, null));
    this.conn.Open();
    sqlDa.UpdateCommand = sqlUpdateCommand1;
    sqlDa.InsertCommand = sqlInsertCommand1;
    sqlDa.DeleteCommand = sqlDeleteCommand1;
    System.Data.SqlClient.SqlTransaction myTran = conn.BeginTransaction();
    sqlUpdateCommand1.Transaction = myTran;
    sqlInsertCommand1.Transaction = myTran;
    sqlDeleteCommand1.Transaction = myTran;try
    {
    sqlDa.Update(dt,"person); 
    myTran.Commit();
    return true;

    }
    catch(System.Data.SqlClient.SqlException ex)
    {
    myTran.Rollback();
    return false;


    finally