【发布时间】:2012-03-30 07:17:39
【问题描述】:
我的错误很简单,但对我来说很难修复它,因为我的知识不好。这是当我通过单击 AddStudent 记录的添加按钮输入记录时,然后我删除的记录就像记录 StudentID = 1, FirstName =Raju ,LastName=Abbasi
在再次删除它并按保存更改之后,当我再次尝试使用 ID=1 意味着输入 ID=1 的记录,我已被删除并记录 StudentID=1 ,FirstName =Ram ,LastName= Rakish 。然后发生错误,即
私有静态 SqlDataAdapter CreateSutdentDataAdapter() { string gettSQL = "SELECT * FROM Student"; string insertSQL = "SET IDENTITY_INSERT Student ON;INSERT INTO Student(StudentID, FirstName,LastName,Gender,GPA,MyImage)" + “值(@StudentID、@FirstName、@LastName、@Gender、@GPA、@MyImage);设置 IDENTITY_INSERT 学生关闭”; string updateSQL = "UPDATE Student SET FirstName=@FirstName,LastName=@LastName ,Gender=@Gender, MyImage=@MyImage," + " GPA=@GPA WHERE StudentID=@StudentID"; string deleteSQL = "DELETE FROM Student WHERE StudentID=@StudentID"; SqlDataAdapter 数据适配器 = 新的 SqlDataAdapter(); dataAdapter.SelectCommand = new SqlCommand(gettSQL, ConnectionManager.GetConnection()); dataAdapter.InsertCommand = new SqlCommand(insertSQL, ConnectionManager.GetConnection()); dataAdapter.InsertCommand.Parameters.Add("@StudentID", SqlDbType.Int).SourceColumn = "StudentID"; dataAdapter.InsertCommand.Parameters.Add("@FirstName", SqlDbType.VarChar,25 ).SourceColumn = "FirstName"; dataAdapter.InsertCommand.Parameters.Add("@LastName", SqlDbType.VarChar, 25 ).SourceColumn = "LastName"; dataAdapter.InsertCommand.Parameters.Add("@Gender", SqlDbType.VarChar ,1).SourceColumn = "Gender"; dataAdapter.InsertCommand.Parameters.Add("@GPA", SqlDbType.Float).SourceColumn = "GPA"; dataAdapter.InsertCommand.Parameters.Add("@MyImage", SqlDbType.VarBinary).SourceColumn = "MyImage"; dataAdapter.UpdateCommand = new SqlCommand(updateSQL, ConnectionManager.GetConnection()); dataAdapter.UpdateCommand.Parameters.Add("@StudentID", SqlDbType.Int).SourceColumn = "StudentID"; dataAdapter.UpdateCommand.Parameters.Add("@FirstName", SqlDbType.VarChar,25 ).SourceColumn = "FirstName"; dataAdapter.UpdateCommand.Parameters.Add("@LastName", SqlDbType.VarChar, 25 ).SourceColumn = "LastName"; dataAdapter.UpdateCommand.Parameters.Add("@Gender", SqlDbType.VarChar ,1).SourceColumn = "Gender"; dataAdapter.UpdateCommand.Parameters.Add("@GPA", SqlDbType.Float).SourceColumn = "GPA"; dataAdapter.UpdateCommand.Parameters.Add("@MyImage", SqlDbType.VarBinary).SourceColumn = "MyImage"; dataAdapter.DeleteCommand = new SqlCommand(deleteSQL, ConnectionManager.GetConnection()); dataAdapter.DeleteCommand.Parameters.Add("@StudentID", SqlDbType.Int).SourceColumn = "StudentID"; 返回数据适配器; } 私有静态无效DefinestudentTableSchema(数据表表) { DataColumn StudentIDColumn = table.Columns.Add("StudentID", typeof(string)); StudentIDColumn.AllowDBNull = false; table.PrimaryKey = new DataColumn[] { StudentIDColumn }; DataColumn StudentFirstName = table.Columns.Add("FirstName", typeof(string)); StudentFirstName.MaxLength = 150; DataColumn StudentLastName = table.Columns.Add("LastName", typeof(string)); StudentLastName.MaxLength = 150; DataColumn StudentGender = table.Columns.Add("Gender", typeof(string)); DataColumn StudentGPA = table.Columns.Add("GPA", typeof(string)); DataColumn StudentImage = table.Columns.Add("MyImage", typeof(Byte[])); } 私有静态数据集 CreateStudentTrackerDataSet() { 数据集 StudentTrackerDataSet = new DataSet(); 数据表 StudentTable = StudentTrackerDataSet.Tables.Add("Student"); 定义studentTableSchema(StudentTable); 返回StudentTrackerDataSet; } 公共静态数据集 GetData() { 数据集 StudentTrackerDataSet = CreateStudentTrackerDataSet(); StudentTrakerDataSet.EnforceConstraints = false; StudentDataAdapter.Fill(StudentTrakerDataSet.Tables["Student"]); StudentTrakerDataSet.EnforceConstraints = true; 返回学生跟踪器数据集; } 公共 AddModifyStudentRecords(DataSet ds,DataRow 行) { 公共静态无效保存数据(参考数据集更改数据集) { DataSet addedDataSet = changesDataSet.GetChanges(DataRowState.Added); 如果(添加数据集!= null) { StudentDataAdapter.Update(addDataSet.Tables["Student"]); 更改数据集。合并(添加数据集); // 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值 } 数据集 modifiedDataSet = changesDataSet.GetChanges(DataRowState.Modified); 如果(修改数据集!= null) { StudentDataAdapter.Update(modifiedDataSet.Tables["Student"]); 更改数据集.合并(修改数据集); } 数据集 deletedDataSet = changesDataSet.GetChanges(DataRowState.Deleted); 如果(已删除数据集!= null) { StudentDataAdapter.Update(deletedDataSet.Tables["Student"]); deletedDataSet.Merge(deletedDataSet); }这是我添加 StudentID 的 Addmodifyform 逻辑
公共部分类 AddModifyStudentRecords :表格 { 数据集 StudentTrackerDataSet; 数据行当前行; 公共 AddModifyStudentRecords() { 初始化组件(); } 公共 AddModifyStudentRecords(数据集 ds) { 初始化组件(); StudentTrackerDataSet = ds; 当前行 = 空; } 公共 AddModifyStudentRecords(DataSet ds,DataRow 行) { 初始化组件(); StudentTrackerDataSet = ds; 当前行 = 行; textBox1.Text =currentRow["StudentID"] .ToString(); textBox2.Text = currentRow["FirstName"].ToString(); textBox4.Text = currentRow["LastName"].ToString(); textBox3.Text = currentRow["Gender"].ToString(); textBox5.Text = currentRow["GPA"].ToString(); txtBrowseFile.Text = currentRow["MyImage"].ToString (); byte[] data = (byte[])currentRow ["MyImage"]; 内存流 ms = 新内存流(数据); pictureBox1.Image = Image.FromStream(ms); 字符串 StudentID = textBox1.Text.ToString(); 字符串 StudentFirstName = textBox2.Text.ToString(); 字符串 StudentLastName = textBox4.Text.ToString(); 字符串性别 = textBox3.Text.ToString(); 字符串 GPA = textBox5.Text.ToString(); 图片 MyImage = pictureBox1.Image; DataTable 表 = StudentTrackerDataSet.Tables["Student"]; if (currentRow == null) { currentRow = table.NewRow(); currentRow["StudentID"] = textBox1.Text.ToString(); table.Rows.Add(currentRow); } currentRow .BeginEdit(); currentRow ["StudentID" ]=StudentID ; currentRow["FirstName"] = StudentFirstName; currentRow["LastName"] = StudentLastName; currentRow["Gender"] = 性别; 当前行[“GPA”] = GPA; currentRow["MyImage"] = convertToByte(txtBrowseFile.Text); currentRow.EndEdit(); 关闭(); }公共部分课程 AditStudent : 表格 { // 创建类变量数据集来跟踪学生 私有数据集 StudentTrackerDataset;
public AditStudent()
{
InitializeComponent();
dataGridView1.DataError += DataGridView1_DataError;
StudentTrackerDataset = ProjectOfSchool.DataAccessLayer.DAC.GetData();
DataTable StudentTable = StudentTrackerDataset.Tables["Student"];
dataGridView1.DataSource = StudentTable;
//StudentTable.Columns["ID"].AutoIncrement = true;
for (int i = 0; i < dataGridView1.Columns.Count; i++)
if (dataGridView1.Columns[i] is DataGridViewImageColumn)
{
((DataGridViewImageColumn)dataGridView1.Columns[i]).ImageLayout = DataGridViewImageCellLayout.Stretch;
break;
}
}
private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
string message = string.Format("Error in {0} columan in row {1}:{2}", e.ColumnIndex, e.RowIndex, e.Exception.Message);
MessageBox.Show(message, "Data Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
private void button1_Click(object sender, EventArgs e)
{
AddModifyStudentRecords AddStudent = new AddModifyStudentRecords(StudentTrackerDataset);
AddStudent.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
object id = dataGridView1.CurrentRow.Cells["StudentID"].Value;
DataRow StudentRow = StudentTrackerDataset.Tables["Student"].Rows.Find(id);
AddModifyStudentRecords modifyStudent = new AddModifyStudentRecords(StudentTrackerDataset, StudentRow);
modifyStudent.ShowDialog();
}
private void button3_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("Are you sure", "Delete Current Row", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
object id = dataGridView1.CurrentRow.Cells["StudentID"].Value;
DataRow currentRow = StudentTrackerDataset.Tables["Student"].Rows.Find(id);
currentRow.Delete();
}
}
private void button4_Click(object sender, EventArgs e)
{
if (!StudentTrackerDataset.HasChanges())
{
MessageBox.Show("There are no Change to Save ", "Save Changes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
try
{
DataSet changesDateSet = StudentTrackerDataset.GetChanges();
ProjectOfSchool.DataAccessLayer.DAC.SaveData(ref changesDateSet);
StudentTrackerDataset.Merge(DAC.GetData());
MessageBox.Show("Data Save Successfully.", "Save Changes");
}
catch (SqlException ex)
{
MessageBox.Show("Data Not Saved:" + ex.Message, "Save Changes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
private void button5_Click(object sender, EventArgs e)
{
if (!StudentTrackerDataset.HasChanges())
{
MessageBox.Show("There are no Changes to Save.", "Save Changes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
DialogResult result = MessageBox .Show ("Are you Sure?","Reject Changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes )
{
StudentTrackerDataset.RejectChanges();
}
}
}
当我终止程序并重新执行程序时,我看到 StudntID=1 也保存到 ID=1 的数据库中
或当我删除StudentID =1并按save Change时按save Change时我也终止程序并重新执行程序,然后当我输入StudentID =1然后没有错误发生
没有终止的其他方法是删除记录 StudentID1 但是当您添加学生记录而不是添加 StudentID=1 但是添加除 1 以外的 StudentID 在这种情况下也不会发生错误。亲爱的谢里克,我已经解决了我的另一个错误,但我的标题中仍然有错误所以请回复我这个错误我也重新编辑了我的代码所以请重播我谢谢
我的数据库中有以下数据类型的记录
学生 ID=INT,
FirstName=VarChar,
姓氏=VarChar,
性别=Varchar,
GPA=浮点数,
MyImage=Vabinary (MAX)
或者可能是 Datarow 无法删除记录或更新记录。我不知道请告诉我,谢谢回复我,我正在等待您的回复。
【问题讨论】:
标签: winforms sql-server-2008 data-binding dataset