2013-09-23 114 views
0

我已經設置在數據庫中IDENTITY爲yes,每當我運行應用程序,關鍵犯規自動增量給了一個錯誤約不允許空值C#自動遞增的主鍵

private void button8_Click(object sender, EventArgs e) 
     { 

      string fname = textBox1.Text; 
      string lname = textBox2.Text; 
      //int idnum = Convert.To(textBox3.Text); 
      int mobnum = Convert.ToInt32(maskedTextBox1.Text); 
      string email = textBox4.Text; 

      int EdInst = comboBox1.SelectedIndex+1; 
      string EdLev = comboBox3.SelectedText; 
      string EdName = comboBox2.SelectedText; 
      Boolean Valid = true; 
      Valid = Validation(Valid); 

      if (Valid == true) 
      { 
       IS2Team1_TriplexDBDataSet.ApplicantRow NewApplicantRow = iS2Team1_TriplexDBDataSet1.Applicant.NewApplicantRow(); 

       IS2Team1_TriplexDBDataSet.ApplicationRow NewApplicationRow = iS2Team1_TriplexDBDataSet1.Application.NewApplicationRow(); 

       //NewApplicantRow.Applicant_ID = ??; // What do i do here for the ID to auto increment? 
       NewApplicantRow.First_Name = fname; 
       NewApplicantRow.Last_Name = lname; 
       //NewApplicantRow.ID_Number =Convert.ToInt32(textBox3.Text); 
       NewApplicantRow.Contact_Number = mobnum; 
       NewApplicantRow.Email_Address = email; 
       NewApplicantRow.University_ID = EdInst; 

       //NewApplicationRow.Application_ID = ??; // What do i do here for the ID to auto increment? 
       NewApplicationRow.Application_Status = "Recieved"; 
       NewApplicationRow.Application_Date = DateTime.Today; 



       iS2Team1_TriplexDBDataSet1.Applicant.Rows.Add(NewApplicantRow); 
       iS2Team1_TriplexDBDataSet1.Application.Rows.Add(NewApplicationRow); 

       MessageBox.Show("Application Submitted", "Application Submitted"); 

       this.applicantTableAdapter.Update(this.iS2Team1_TriplexDBDataSet1); 


       //Hide(); 
       //Form4 frmUpdate = new Form4(); 
       //frmUpdate.Show(); 

      } 
       else if (Valid == false) 
      { 
        MessageBox.Show("Required Information Missing"); 
        textBox1.Focus(); 
      } 
+0

的您的數據庫結構是什麼樣的? –

+0

看看你的適配器'InsertCommand'。 –

回答

0

你必須設置你的表,定義以下值:

Image

樣品:不爲實體框架

如果要插入新行,只需忽略你的Identity-Row和 獲得自動生成的身份:@@Identity

希望得到這個幫助!

下面是一個未經考驗的例子:

public static void Test() 
    { 
     int cIdentity = 0; 

     SqlConnection cConnection = new SqlConnection("..."); 
     cConnection.Open(); 

     SqlCommand cCommand = new SqlCommand("Insert INTO TestTable (Name) VALUES ('Test'); "+ 
      "SELECT @@IDENTITY AS Ident", cConnection); 

     IDataReader cReader = null; 

     try 
     { 
      cReader = cCommand.ExecuteReader(CommandBehavior.CloseConnection); 
      if (cReader.Read()) 
      { 
       cIdentity = cReader.GetInt32(0); 
      } 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine(ex); 
      if (cReader != null) 
      { 
       cReader.Close(); 
      } 
     } 
     finally 
     { 
      if (cConnection != null) 
      { 
       cConnection.Close(); 
      } 
     } 
    } 
+0

我如何以@@身份獲取自動生成的身份?你能舉個例子說明如何做到這一點嗎?謝謝:) – user2806570

+0

示例現在在我的文章:) – BendEg

0

我們可以看到你的看法是自動增量?它應該設置爲+1或標識(1,1)

+0

您是否每次更新時都更改實體ID? –

+0

@HamletHakobyan,ID不應在更新時編輯,但仍取決於方案,但自動增量僅適用於插入不更新的新細節。除非更新時更改了ID本身。 – user2705620

0

嘗試在項目中打開EDMX,單擊列並查看屬性(F4)。將StoreGeneratedPattern設置爲標識。

+0

我已經設置了身份,但它仍然打破。 – user2806570

+0

StoreGeneratedPattern已被設置爲Identity。我以爲我不會爲該列插入一個值,但它會一直打破這個錯誤Applicant_ID不能爲空 – user2806570

+0

@ user2806570身份本身應該在數據庫中設置。嘗試一下。 – user2705620