我的讲师给了我们在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)代码必须以某种方式填充缺少的列。
我在这方面找不到任何进一步的东西(可能因为它是自动生成的代码),但我很好奇这段代码的作用以及为什么有必要放入主键和复选框,而不是其余的数据。