2014-05-13 57 views
0

我當前的代碼給我以下錯誤,第一次添加記錄時,第二次當我刪除或更新記錄。在這些情況下,數據庫仍然正確更新。數據庫正確更新,但出現錯誤

要進一步解釋,我可以添加類似XXX的數據,即使數據庫已更新,但數據庫中並不存在數據庫。當我刪除該條目時,數據庫更新,並且出現錯誤#2。如果我再返回並再次插入XXX,則數據庫會更新,並再次出現錯誤#1。

編輯#2,我也注意到在datbase該UNIQUE KEY列跳躍的數字,所以我可以添加VVV,誤差1時,它得到的136 UNIQUE KEY然後加真空紫外,得到錯誤#1和UNIQUE KEY是138

違反UNIQUE KEY約束條件AK_DimCurrency_CurrencyAlternateKey。無法在對象dbo.DimCurrency中插入重複密鑰。重複的鍵值是(XXX)。該語句已終止。

IListSource不包含任何數據源。

public partial class Default : System.Web.UI.Page 
{ 
    SqlConnection vid = new SqlConnection("Data Source=(LocalDB)\\v11.0;AttachDbFilename=\\AdventureWorksDW_Data.mdf;Integrated Security=True;Connect Timeout=30"); 
    static DataTable dtDataForGrid = new DataTable(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void ButtonSearch_Click(object sender, EventArgs e)//on button click the database connection is opened and the query is executed if possible, if not error will display on label 1 
    { 
     LabelError.Text = ""; 

     try 
     { 
      string str = TextBox1.Text; 
      SqlCommand xp = new SqlCommand(str, vid); 

      vid.Open(); 
      xp.ExecuteNonQuery(); 

      SqlDataAdapter da = new SqlDataAdapter(); 
      da.SelectCommand = xp; 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      GridView1.DataSource = ds; 
      GridView1.DataBind(); 
      vid.Close(); 
     } 

     catch (Exception c) 
     { 
      LabelError.Text = (c.Message); 
     } 
    } 

    protected void ButtonReset_Click(object sender, EventArgs e)//resets the page, if error, it will display at label 1 
    { 
     try 
     { 
      Response.Redirect("~/Default.aspx"); 
     } 
     catch (Exception c) 
     { 
      LabelError.Text = (c.Message); 
     } 
    } 

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)//drop down list that adds text depending on choice to reduce redundant typing in multiple executions 
    { 
     if (DropDownList1.SelectedIndex == 1) 
     { 
      TextBox2.Text = "INSERT INTO"; 
      TextBox3.Text = " VALUES"; 
      TextBox4.Text = ""; 
      TextBox4.Enabled = false; 
     } 
     if (DropDownList1.SelectedIndex == 2) 
     { 
      TextBox2.Text = "UPDATE"; 
      TextBox3.Text = " SET"; 
      TextBox4.Text = " WHERE"; 
      TextBox4.Enabled = true; 
     } 
     if (DropDownList1.SelectedIndex == 3) 
     { 
      TextBox2.Text = "DELETE FROM"; 
      TextBox3.Text = " WHERE"; 
      TextBox4.Text = ""; 
      TextBox4.Enabled = false; 
     } 
    } 

    protected void ButtonChange_Click(object sender, EventArgs e)//executes the operation from textbox2, and 3. 
    { 
     LabelError2.Text = "";//resets the label to nothing before changing the text again if needed below 
     LabelFullOperation.Text = "";//resets the label to nothing before changing the text again if needed below 

     if (TextBox4.Text == null)//sets the label6 text to textbox 2 and 3, unless 4 has text, in which case 2, 3, and 4 will be used 
     { 
      LabelFullOperation.Text = TextBox2.Text + TextBox3.Text; 
     } 
     else 
     { 
      LabelFullOperation.Text = TextBox2.Text + TextBox3.Text + TextBox4.Text; 
     } 
     try 
     { 
      string str = TextBox2.Text + TextBox3.Text + TextBox4.Text;//gets the text from textboxes 2, 3, adn 4, if any 
      SqlCommand xp = new SqlCommand(str, vid); 

      vid.Open(); 
      xp.ExecuteNonQuery(); 

      SqlDataAdapter da = new SqlDataAdapter(); 
      da.SelectCommand = xp; 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      GridView1.DataSource = ds; 
      GridView1.DataBind(); 
      vid.Close(); 
     } 
     catch (Exception c) 
     { 
      LabelError2.Text = (c.Message); 
     } 
    } 
+0

如果我是一個博彩人,我會說問題是您可以在數據庫中已存在的行上執行「INSERT」。您不應該將'INSERT'插入到數據庫中已有的行中(即有一個鍵)。 –

+0

我可以輸入XXX的測試,它不在數據庫中,但我仍然收到此錯誤。驗證實際記錄不存在後,我在第一個條目中收到此錯誤。 – JLM

回答

1

您正在執行兩次SQL。這是第一次執行是調用

xp.ExecuteNonQuery(); 

這個工作過程中,但隨後的SQL執行,當你調用

da.Fill(ds); 

會拋出您所看到的錯誤,第二個時間。

由於您最終需要DataSet,請嘗試刪除xp.ExecuteNonQuery();行。

+0

刪除該行確實修復了跳號和錯誤#1。對於除基本搜索以外的任何操作,錯誤#2仍在發生。 – JLM

+0

@JLM,請發佈例外名稱和錯誤#2的詳細信息。 – David

+0

IListSource不包含任何數據源。我只是想出了它。它必須與數據源代碼 – JLM

0

您可能會再次使用相同的鍵爲其輸入表項。 每次執行代碼時,都會將值插入表中。因此,如果您再次執行並且每次爲主鍵提供相同的值,則會發生錯誤。

因此,您可以刪除舊記錄,如果它是多餘的,或者您可以使用不同的主鍵測試您的程序。

+0

我可以添加XXX的測試,數據庫更新與該條目,我得到的錯誤。我刪除了條目,數據庫更新,並且我得到了ILIST錯誤,並且當我再次插入XXX時,我再次遇到第一個錯誤。 – JLM

+0

如果你有一個XXX檢查,然後在一個空的表中,ILIST錯誤將會出現。 –