내 오류는 간단하지만 내 지식이 좋지 않아 해결하기 어렵습니다. 언제 내가 AddStartent 레코드의 Addbutton을 클릭하여 레코드를 입력 한 다음 레코드처럼 삭제 한 레코드 StudentID = 1, FirstName = Raju, LastName = Abbasi제약 조건을 활성화하지 못했습니다. 하나 이상의 행에 null이 아닌 고유 키 또는 외래 키 제약 조건을 위반하는 값이 있습니다.
삭제 한 후 다시 저장하고 변경을 저장합니다. 다시 ID = 1 개 수단 내가 삭제 된 해당 ID = 1 레코드를 입력 사용하려고하고 StudentID = 1 기록, 이름 = 램, 성 = 경쾌한 그 때는 오류가 여기
private static SqlDataAdapter CreateSutdentDataAdapter() { string gettSQL = "SELECT * FROM Student"; string insertSQL = "SET IDENTITY_INSERT Student ON;INSERT INTO Student(StudentID, FirstName,LastName,Gender,GPA,MyImage)" + "VALUES (@StudentID,@FirstName,@LastName,@Gender,@GPA,@MyImage);SET IDENTITY_INSERT Student OFF"; string updateSQL = "UPDATE Student SET [email protected],[email protected] ,[email protected], [email protected]," + " [email protected] WHERE [email protected]"; string deleteSQL = "DELETE FROM Student WHERE [email protected]"; SqlDataAdapter dataAdapter = new 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"; return dataAdapter; } private static void DefinestudentTableSchema(DataTable table) { 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[])); } private static DataSet CreateStudentTrackerDataSet() { DataSet StudentTrackerDataSet = new DataSet(); DataTable StudentTable = StudentTrackerDataSet.Tables.Add("Student"); DefinestudentTableSchema(StudentTable); return StudentTrackerDataSet; } public static DataSet GetData() { DataSet StudentTrakerDataSet = CreateStudentTrackerDataSet(); StudentTrakerDataSet.EnforceConstraints = false; StudentDataAdapter.Fill(StudentTrakerDataSet.Tables["Student"]); StudentTrakerDataSet.EnforceConstraints = true; return StudentTrakerDataSet; } public AddModifyStudentRecords(DataSet ds, DataRow row) { public static void SaveData(ref DataSet changesDataSet) { DataSet addedDataSet = changesDataSet.GetChanges(DataRowState.Added); if (addedDataSet != null) { StudentDataAdapter.Update(addedDataSet.Tables["Student"]); changesDataSet.Merge(addedDataSet); // Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints } DataSet modifiedDataSet = changesDataSet.GetChanges(DataRowState.Modified); if (modifiedDataSet != null) { StudentDataAdapter.Update(modifiedDataSet.Tables["Student"]); changesDataSet.Merge(modifiedDataSet); } DataSet deletedDataSet = changesDataSet.GetChanges(DataRowState.Deleted); if (deletedDataSet != null) { StudentDataAdapter.Update(deletedDataSet.Tables["Student"]); deletedDataSet.Merge(deletedDataSet); }
인 발생할 수있다 내 Addmodifyform 논리를 StudentID에 추가하기위한 로직입니다.
public partial class AddModifyStudentRecords : Form { DataSet StudentTrackerDataSet; DataRow currentRow; public AddModifyStudentRecords() { InitializeComponent(); } public AddModifyStudentRecords(DataSet ds) { InitializeComponent(); StudentTrackerDataSet = ds; currentRow = null; } public AddModifyStudentRecords(DataSet ds, DataRow row) { InitializeComponent(); StudentTrackerDataSet = ds; currentRow = row; 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"]; MemoryStream ms = new MemoryStream(data); pictureBox1.Image = Image.FromStream(ms); string StudentID = textBox1.Text.ToString(); string StudentFirstName = textBox2.Text.ToString(); string StudentLastName = textBox4.Text.ToString(); string Gender = textBox3.Text.ToString(); string GPA = textBox5.Text.ToString(); Image MyImage = pictureBox1.Image; DataTable table = 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"] = Gender; currentRow["GPA"] = GPA; currentRow["MyImage"] = convertToByte(txtBrowseFile.Text); currentRow.EndEdit(); Close(); }
public partial class AditStudent : Form { // 학생을 추적하는 클래스 variabl 데이터 집합 개인 데이터 집합 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 저장을 누른 후 변경 저장을 누른 후에 변경 프로그램을 종료하고 프로그램을 종료 한 후 변경합니다. StudentID = 1로 입력하면 오류가 발생하지 않습니다.
그리고 다른 방법으로 종료하지 않고 레코드 StudentID1을 삭제하면됩니다. 추가 할 때 그는 학생 레코드지만 StudentID = 1 추가하지만 StudentID를 추가하지 않으면이 경우에 1도 오류가 발생하지 않습니다. 친애하는 Sherik 내 다른 오류를 해결했지만 여전히 내 Tittle에 오류가 있습니다. 그래서이 오류에 대해 제발 응답하십시오. 그리고 제 코드도 다시 편집하십시오. 제발 재생 해주세요. 감사합니다.
나는 내 데이터베이스에있는 레코드가 있습니다.
StudentID = INT,
FIRSTNAME = VARCHAR,
성 = VARCHAR,
성별 = VARCHAR,
으로 데이터 형식에 따라 17,451,515,GPA = 플로트,
myimage을 = Vabinary (MAX)
또는 DataRow를 할 수는 기록을 삭제하거나 기록을 업데이트하지 못한다. 나에게 말해줘. 제발 대답 해줘서 고마워. 너의 대답을 기다리고있어.
Respectable Shrieks 내 프로그램이 수동으로 StudentID를 입력하면됩니다. 그런 다음 오류가 발생하면 FormID1.text의 StudentBoxID.text에 StudentID를 전달해야합니다. 그러면 StudentID를 전달하는 방법을 알지 못합니다. TextBox1.text를 클릭하면 AddStudent 폼의 Addbutton을 클릭합니다. 또한 자동 증분 키 –
을 생성하는 방법은 내 Addmodifyform 논리가 StudentID 공용 AddModifyStudentRecords (DataSet ds, DataRow 행)를 추가하는 방법입니다. InitializeComponent(); 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"]; MemoryStream ms = 새 MemoryStream (데이터); pictureBox1.Image = Image.FromStream (ms); –
및이 문자열 StudentID = textBox1.Text.ToString(); string StudentFirstName = textBox2.Text.ToString(); string StudentLastName = textBox4.Text.ToString(); string Gender = textBox3.Text.ToString(); string GPA = textBox5.Text.ToString(); Image MyImage = pictureBox1.Image; DataTable table = StudentTrackerDataSet.Tables [ "학생"]; if (currentRow == null) { –