2012-03-13 15 views
-2

私のエラーは単純ですが、私の知識は良くないので私にとってはそれを修正するのは難しいです。私はAddStartentレコードのAddbuttonをクリックしてレコードを入力し、次にレコードのように削除したレコードStudentID = 1、FirstName = Raju、LastName = Abbasi制約を有効化できませんでした。 1つ以上の行にnull以外の、一意の、または外部キー制約に違反する値が含まれています

後にそれを削除し、再び、ID = 1つの手段は、私が削除されたことをID = 1のレコードを入力してください使用しようとStudentID = 1録音、姓=ラムは、姓=粋.Then誤差はここ

 

    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(); 
    } 

パブリック部分クラスAditStudent:フォーム { //生徒を追跡するクラス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、

姓= VARCHAR、

氏名= VARCHAR、

性別= VARCHAR、

としてデータ型を以下

GPA =フロート、

MYIMAGE = Vabinary(MAX)

かのDataRowレコードを削除するか、レコードを更新することができないかもしれません。私はあなたに返事をしてくれてありがとうと私はあなたの返事を待っています。

答えて

0

エラーメッセージは、プライマリキーの制約が当たっていることを示しているようです。 まず、ユーザーがStudent IDフィールドを入力するのを止めることをお勧めします。あなたが使用しているどのデータベースであれ、それを自動増分キーとして生成させてください。アクセスでは、オートナンバー型と呼ばれます。

これを済ませたら、テストして結果を投稿してください。

+0

Respectable Shrieks私のプログラムは、私がそれを行うとエラーが発生した場合、手動でStudentIDを入力することです。私はStudentIDをformのTextBox1.textに渡さなければなりません。AddstudentRecordと私はStudentIDを渡す方法を知らないTextBox1.textをクリックして、AddStudentフォームのAddボタンをクリックします。また、自動インクリメントキーを生成する方法を教えてください –

+0

ここに私のAddmodifyformロジックを追加するためのStudentID public 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); –

+0

また、この文字列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テーブル= StudentTrackerDataSet.Tables ["Student"]; if(currentRow == null) { –