我正在开发罗斯文(Northwind)数据库,以复制此演示 该代码未显示任何错误,但所有插入/更新/删除操作只是暂时的。 如果我在下次运行代码时添加一条记录或取消或更新该表,则该表的内容仍是原始内容,而没有进行任何我保存在数据库中的修改。

private static DataTable GetDataTable(string queryString)
  {
      String connString = ConfigurationManager.ConnectionStrings["NORTHWNDConnectionString"].ConnectionString;
       SqlConnection mySqlConnection = new SqlConnection(connString);
       SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
       mySqlDataAdapter.SelectCommand = new SqlCommand(queryString, mySqlConnection);

       DataTable myDataTable = new DataTable();
       mySqlConnection.Open();
       try
       {
            mySqlDataAdapter.Fill(myDataTable);
       }
       finally
       {
            mySqlConnection.Close();
       }

       return myDataTable;
  }

  private DataTable Employees
  {
       get
       {
            object obj = this.Session["Employees"];
            if ((!(obj == null)))
            {
                 return ((DataTable)(obj));
            }
            DataTable myDataTable = new DataTable();
            myDataTable = GetDataTable("SELECT * FROM Employees");
            this.Session["Employees"] = myDataTable;
            return myDataTable;
       }
  }

  protected void RadGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
  {
       this.RadGrid1.DataSource = this.Employees;
       this.Employees.PrimaryKey = new DataColumn[] { this.Employees.Columns["EmployeeID"] };
  }

  protected void RadGrid1_UpdateCommand(object source, GridCommandEventArgs e)
  {
       GridEditableItem editedItem = e.Item as GridEditableItem;
       UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);

       //Prepare new row to add it in the DataSource
       DataRow[] changedRows = this.Employees.Select("EmployeeID = " + editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["EmployeeID"]);

       if (changedRows.Length != 1)
       {
            RadGrid1.Controls.Add(new LiteralControl("Unable to locate the Employee for updating."));
            e.Canceled = true;
            return;
       }

       //Update new values
       Hashtable newValues = new Hashtable();

       newValues["Country"] = (userControl.FindControl("TextBox7") as TextBox).Text;
       newValues["City"] = (userControl.FindControl("TextBox8") as TextBox).Text;
       newValues["Region"] = (userControl.FindControl("TextBox9") as TextBox).Text;
       newValues["HomePhone"] = (userControl.FindControl("HomePhoneBox") as RadMaskedTextBox).Text;
       newValues["BirthDate"] = (userControl.FindControl("BirthDatePicker") as RadDatePicker).SelectedDate.ToString();
       newValues["TitleOfCourtesy"] = (userControl.FindControl("ddlTOC") as DropDownList).SelectedItem.Value;

       newValues["Notes"] = (userControl.FindControl("TextBox1") as TextBox).Text;
       newValues["Address"] = (userControl.FindControl("TextBox6") as TextBox).Text;
       newValues["FirstName"] = (userControl.FindControl("TextBox2") as TextBox).Text;
       newValues["LastName"] = (userControl.FindControl("TextBox3") as TextBox).Text;
       newValues["HireDate"] = (userControl.FindControl("HireDatePicker") as RadDatePicker).SelectedDate.ToString();
       newValues["Title"] = (userControl.FindControl("TextBox4") as TextBox).Text;

       changedRows[0].BeginEdit();
       try
       {
            foreach (DictionaryEntry entry in newValues)
            {
                 changedRows[0][(string)entry.Key] = entry.Value;
            }
            changedRows[0].EndEdit();
            this.Employees.AcceptChanges();
       }
       catch (Exception ex)
       {
            changedRows[0].CancelEdit();

            Label lblError = new Label();
            lblError.Text = "Unable to update Employees. Reason: " + ex.Message;
            lblError.ForeColor = System.Drawing.Color.Red;
            RadGrid1.Controls.Add(lblError);

            e.Canceled = true;
       }
  }

  protected void RadGrid1_InsertCommand(object source, GridCommandEventArgs e)
  {
       UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);

       //Create new row in the DataSource
       DataRow newRow = this.Employees.NewRow();

       //Insert new values
       Hashtable newValues = new Hashtable();

       newValues["Country"] = (userControl.FindControl("TextBox7") as TextBox).Text;
       newValues["City"] = (userControl.FindControl("TextBox8") as TextBox).Text;
       newValues["Region"] = (userControl.FindControl("TextBox9") as TextBox).Text;
       newValues["HomePhone"] = (userControl.FindControl("HomePhoneBox") as RadMaskedTextBox).Text;
       newValues["BirthDate"] = (userControl.FindControl("BirthDatePicker") as RadDatePicker).SelectedDate.ToString();
       newValues["TitleOfCourtesy"] = (userControl.FindControl("ddlTOC") as DropDownList).SelectedItem.Value;

       newValues["Notes"] = (userControl.FindControl("TextBox1") as TextBox).Text;
       newValues["Address"] = (userControl.FindControl("TextBox6") as TextBox).Text;
       newValues["FirstName"] = (userControl.FindControl("TextBox2") as TextBox).Text;
       newValues["LastName"] = (userControl.FindControl("TextBox3") as TextBox).Text;
       newValues["HireDate"] = (userControl.FindControl("HireDatePicker") as RadDatePicker).SelectedDate.ToString();
       newValues["Title"] = (userControl.FindControl("TextBox4") as TextBox).Text;

       //make sure that unique primary key value is generated for the inserted row
       newValues["EmployeeID"] = (int)this.Employees.Rows[this.Employees.Rows.Count - 1]["EmployeeID"] + 1;
       try
       {
            foreach (DictionaryEntry entry in newValues)
            {
                 newRow[(string)entry.Key] = entry.Value;
            }
            this.Employees.Rows.Add(newRow);
            this.Employees.AcceptChanges();
       }
       catch (Exception ex)
       {
            Label lblError = new Label();
            lblError.Text = "Unable to insert Employees. Reason: " + ex.Message;
            lblError.ForeColor = System.Drawing.Color.Red;
            RadGrid1.Controls.Add(lblError);

            e.Canceled = true;
       }
  }
  protected void RadGrid1_DeleteCommand(object source, GridCommandEventArgs e)
  {
       string iD = (e.Item as GridDataItem).OwnerTableView.DataKeyValues[e.Item.ItemIndex]["EmployeeID"].ToString();
       DataTable employeeTable = this.Employees;
       if (employeeTable.Rows.Find(iD) != null)
       {
            employeeTable.Rows.Find(iD).Delete();
            employeeTable.AcceptChanges();
       }
  }

为什么我的插入/删除/更新在当前会话中只是临时的并且可见? 如何解决此问题,以获取插入/更新/删除更改数据库中数据的能力?

===============>>#1 票数:0

确认Rows.Add()AcceptChanges()不会向基础数据库写入任何内容。 它们仅对内存中的数据结构(如DataTables和DataSets)进行操作。 要实际保存更改,您必须:

  1. 可以使用TableAdapter.Update()方法并向其提供修改后的DataTable
  2. 使用SqlCommand并手动执行UPDATEINSERTDELETE命令。

在将您的更改发送回数据库之前,您不得调用AcceptChanges()

  ask by Nullbyte translate from so

未解决问题?本站智能推荐: