2016-02-12 171 views
3

我有一個web形式基本上是這樣,錯誤插入數據庫

enter image description here

我的頁面有標籤,按鈕,GRIDVIEW,文本框

數據顯示從另一個數據庫來

每當我嘗試插入到另一個數據庫(再次) 錯誤發生時說:

當使用列列表且IDENTITY_INSERT爲ON時,表'PO2'中標識列的顯式值只能爲 。

我使用SQL Server

here

ASPNET碼:

<table class="col-lg-12"> 

    <tr> 
     <td class="style5"> 
     Shipping Method</td> 
     <td class="style6">Shipping Term</td> 
     <td class="style6">Payment Term</td> 
     <td class="style4">Delivery Date</td> 
     <td class="style4">Final Delivery Date</td> 
    </tr> 

    <tr> 
     <td> 
      <asp:Label ID="lbShippingMethod" runat="server" BorderColor="Black" Font-Size="Larger" /></td> 
     <td> 
      <asp:Label ID="lbShippingTerm" runat="server" BorderColor="Black" Font-Size="Larger" /></td> 

     <td> 
      <asp:Label ID="lbPaymentTerm" runat="server" BorderColor="Black" Font-Size="Larger" /></td> 
     <td> 
      <asp:Label ID="lbDeliveryDate" runat="server" BorderColor="Black" Font-Size="Larger" /></td> 
     <td> 
      <asp:Textbox ID="txtDate" runat="server" BorderColor="Black" Font-Size="Larger" type="date" /></td> 
    </tr> 

     <tr> 
      <td> 
       <br /> 
       <br /> 
      </td> 
     </tr> 

     </div> 
    </table> 


<div class="container"> 
<div class="col-lg-10 pull-right"> 
<table class="col-lg-12"> 

<tr> 
    <td> 
     PR#</td> 


    <td class="style2"> 
     Product Name 
    </td> 
    <td>Product#</td> 

    <td>Price</td> 

    <td> 
     Quantity 
    </td> 


</tr> 
<tr> 

      <td> 
       <asp:Label ID="PRID" runat="server" BorderColor="Black" Font-Size="Larger" /> 
      </td> 

      <td> 
       <asp:DropDownList ID="ddlName" runat="server" class="form-control" 
        Width="150px" onselectedindexchanged="ddlName_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList> 
      </td> 

<td class="style2"> 
    <asp:Label ID="lbProductID" runat="server" Width="90px"></asp:Label> 
</td> 


    <td class="style2"> 
    <asp:Label ID="lbPrice" runat="server"></asp:Label> 
    </td> 

     <td> 
     <asp:TextBox ID="Quantity" runat="server" Width="90px" Type="Number" required></asp:TextBox> 
     </td> 

     <td> 
     <asp:Label ID="Amount" runat="server" Width="90px" Type="Number" required> </asp:Label> 
    </td> 


    <div class="pull-right"> 
     <td><asp:Button ID="btnAdd" runat="server" class="btn btn-default" 
      style="background-color:Silver" text="Add Product" ForeColor="Black" 
      onclick="btnAdd_Click" /> 
    </td> 
    </div> 
    </tr> 
    </table> 
    </div> 
    </div> 
    <br /> 



<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="1000px" HorizontalAlign="Center" 
      DataSourceID="SqlDataSource1"> 
    <Columns> 
     <asp:BoundField DataField="PRID" HeaderText="PRID" SortExpression="PRID" /> 
     <asp:BoundField DataField="ProductID" HeaderText="ProductID" 
      SortExpression="ProductID" /> 
     <asp:BoundField DataField="ProductName" HeaderText="ProductName" 
      SortExpression="ProductName" /> 
     <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" /> 
     <asp:BoundField DataField="Quantity" HeaderText="Quantity" 
     SortExpression="Quantity" /> 
     <asp:BoundField DataField="Amount" HeaderText="Amount" 
      SortExpression="Amount" /> 
    </Columns> 
</asp:GridView> 

     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:MyOwnMeatshopConnectionString %>" 
     SelectCommand="SELECT [PRID], [ProductID], [ProductName], [Price], [Quantity], [Amount] FROM [PRDetails] WHERE ([PRID] = @PRID)"> 
     <SelectParameters> 
      <asp:QueryStringParameter Name="PRID" QueryStringField="ID" Type="Int32" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 


    <div class="container"> 
    <div class="pull-right col-lg-5"> 
     <h4 />SUB TOTAL Php <asp:Label ID="lbSubTotal" runat="server"></asp:Label> 
     <h4 />VAT (12%) 
     Php <asp:Literal ID="ltVAT" runat="server"></asp:Literal> 
     <h4 />TOTAL Php <asp:Literal ID="ltTotal" runat="server"> </asp:Literal> 
    </div> 
    </div> 


    <div class="pull-right"> 
    <td> 
    <asp:Button ID="btnSum" runat="server" class="btn btn-default" style="background-color:Silver" text="TOTAL" ForeColor="Black" /> 
    </td> 
    </div> 

    <br /> 
    <br /> 
    <br /> 
    <br /> 

    <div class="form-group"> 
      <label class="control-label col-lg-4">Remarks</label> 
      <div class="col-lg-8"> 
       <asp:TextBox ID="txtRemarks" runat="server" class="form- control" MaxLength="100" TextMode="MultiLine" /> 
      </div> 
     </div> 

    <div class="pull-right"> 
    <div class="form-group"> 
    <asp:Button ID="btnApprove" runat="server" class="btn btn-success" text="Approve" 
      onclick="btnApprove_Click" /> 
      <asp:Button ID="btnCancel" runat="server" class="btn" style="color:White" text="Disapprove" BackColor="Black" PostBackUrl="~/Default.aspx" /> 


      </div> 
     </div> 
</div> 

    </form> 

這裏是BTN碼(覈准)

void addtoPO() 
    { 
     con.Open(); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = "INSERT INTO PO2 VALUES (@UserID, @SupplierID, @CompanyName, @ShippingMethod, " + 
      "@ShippingTerm, @Term, @DeliveryDate, @ModifiedBy, @DateModified, @Status, @Remarks, @PODate, @DeliveryDate)"; 
     cmd.Parameters.AddWithValue("@UserID", Session["userid"].ToString()); 
     cmd.Parameters.AddWithValue("@SupplierID", lbSupplierID.Text); 
     cmd.Parameters.AddWithValue("@CompanyName", lbCompName.Text); 

     cmd.Parameters.AddWithValue("@ShippingMethod", lbShippingMethod.Text); 
     cmd.Parameters.AddWithValue("@ShippingTerm", lbShippingTerm.Text); 
     cmd.Parameters.AddWithValue("@Term", lbPaymentTerm.Text); 

     cmd.Parameters.AddWithValue("@ModifiedBy", lbFNA.Text + lbLNA.Text); 
     cmd.Parameters.AddWithValue("@DateModified", DateTime.Now); 
     cmd.Parameters.AddWithValue("@Status", "Approved"); 
     cmd.Parameters.AddWithValue("@Remarks", txtRemarks.Text); 

     cmd.Parameters.AddWithValue("@PODate", DateTime.Now); 
     cmd.Parameters.AddWithValue("@DeliveryDate", txtDate.Text); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 
    protected void btnApprove_Click(object sender, EventArgs e) 
    { 
     addtoPO(); 

     foreach (GridViewRow row in GridView1.Rows) 
     { 

      if (row.RowType == DataControlRowType.DataRow) 
      { 


       int ProductID = int.Parse(GridView1.Rows[row.RowIndex].Cells[1].Text); 
       string ProductName = GridView1.Rows[row.RowIndex].Cells[2].Text; 
       decimal Price = decimal.Parse(GridView1.Rows[row.RowIndex].Cells[3].Text); 
       int Quantity = int.Parse(GridView1.Rows[row.RowIndex].Cells[4].Text); 
       int Amount = int.Parse(GridView1.Rows[row.RowIndex].Cells[5].Text); 

       con.Open(); 
       SqlCommand cmd = new SqlCommand(); 
       cmd.Connection = con; 
       cmd.CommandText = "INSERT INTO PODetails (ProductID, Name, Price, Quantity, Amount) " + 
        "VALUES (@ProductID, @Name, @Price, @Quantity, @Amount)"; 

       //cmd.Parameters.AddWithValue("@UserID", Session["userid"].ToString()); 
       cmd.Parameters.Add("@ProductID", SqlDbType.VarChar).Value = ProductID; 
       cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = ProductName.ToString(); 
       cmd.Parameters.Add("@Price", SqlDbType.Decimal).Value = Price; 
       cmd.Parameters.Add("@Quantity", SqlDbType.Int).Value = Quantity; 
       cmd.Parameters.Add("@Amount", SqlDbType.Int).Value = Amount; 

       cmd.ExecuteNonQuery(); 



       GridView1.EditIndex = -1; 
       GridView1.DataBind(); 

       //con.Open(); 

       //cmd.CommandText = "DELETE FROM Orders"; 
       //cmd.Parameters.Add("@RefNo", RefNo); 


       con.Close(); 

      } 
     } 

我插入到兩個不同的表是wh y插入是分開的,其他值正在GET到GRIDVIEW中。

我打開和關閉身份但沒有工作。

其他插件,我有一切都很好,這只是一個有錯誤。

+0

順便說一下,這是SQL Server而不是MySql – Steve

+0

這根本不像* MySQL * – David

+0

如果您明確地將值傳遞給字段,或者如錯誤說打開和關閉表的identity_insert。看看http://stackoverflow.com/a/3373070/87956 –

回答

1
insert into TABLE ([column list]) 
values ([values list]) 

您還沒有列出插入列列表,因此服務器嘗試完成所有列「從左到右」。下一個錯誤是關於沒有足夠的值爲表列提供的值。目前它試圖將@ UserID發佈到PO2.ID,@SupplierID到PO2.UserID等等中。

+0

非常感謝你@Ivan Starostin工作就像一個魅力! 感謝您回答我的簡歷問題:D –

0

謝謝你回答大家真的很感激! 原諒我的問題,因爲我是超級新硬代碼C#和asp.net

我只是跟着先生@Ivan的答案斯塔羅斯京

cmd.CommandText = "INSERT INTO PO2 (UserID, SupplierID, CompanyName, ShippingMethod, " + 
      "ShippingTerm, Term, ModifiedBy, DateModified, Status, Remarks, PODate, DeliveryDate, FinalDeliveryDate, PRID) VALUES (@UserID, @SupplierID, @CompanyName, @ShippingMethod, " + 
      "@ShippingTerm, @Term, @ModifiedBy, @DateModified, @Status, @Remarks, @PODate, @DeliveryDate, @FinalDeliveryDate, @PRID)"; 

做了這樣的固定一些列INSERT語句和工作!