TableAdapter.Delete()方法有什么作用?

时间:2016-05-17 00:41:21

标签: c# mysql sql

我的讲师给了我们在C#中使用SQL数据库时使用的这段代码:

DataSetEmployeeTableAdapter.Delete(Convert.ToInt32(iDTextBox.Text), isTeachingPositionCheckBox.IsChecked);

我们数据库中的Employee表包含字段ID,FirstName,LastName,Position,Department和IsTeachingPosition。我很好奇为什么我们需要告诉Delete()方法IsTeachingPosition是真还是假,因为我认为它应该只需要主键来删除一个条目。我问我的讲师,他不知道,但当我查看Delete()方法背后的代码时,它说:

public virtual int Delete(int Original_ID, global::System.Nullable<bool> Original_IsTeachingPosition) {
        this.Adapter.DeleteCommand.Parameters[0].Value = ((int)(Original_ID));
        if ((Original_IsTeachingPosition.HasValue == true)) {
            this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(0));
            this.Adapter.DeleteCommand.Parameters[2].Value = ((bool)(Original_IsTeachingPosition.Value));
        }
        else {
            this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(1));
            this.Adapter.DeleteCommand.Parameters[2].Value = global::System.DBNull.Value;
        }
        global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
        if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
                    != global::System.Data.ConnectionState.Open)) {
            this.Adapter.DeleteCommand.Connection.Open();
        }

我看到它检查复选框是否为null或是否有值,并对每个条件执行不同的操作(用0或1的对象填充参数[1]),所以我问我的讲师他仍然不知道。这导致我研究并发现Delete()方法需要为每个列赋予它,这意味着(对象)(0)代码必须以某种方式填充缺少的列。

我在这方面找不到任何进一步的东西(可能因为它是自动生成的代码),但我很好奇这段代码的作用以及为什么有必要放入主键和复选框,而不是其余的数据。

0 个答案:

没有答案