3

I have a web form which is basically this,

enter image description here

my page has LABELS, BUTTONS, GRIDVIEW, TEXTBOXES

DATA shown came from ANOTHER DATABASE

whenever i try to INSERT into another database (again) ERROR occurs saying:

An explicit value for the identity column in table 'PO2' can only be specified when a column list is used and IDENTITY_INSERT is ON.

I am using Sql server

here

ASPNET CODES:

 <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>

HERE is BTN codes (APPROVE)

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

            }
        }

I am INSERTING INTO TWO different tables that's why insert are separated and other values are being GET into GRIDVIEW.

I Have turning on and off the is identity but didn't work.

Other insert that i have are all good this was just the one has error.

2 Answers2

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

you have not listed inserted column list thus server tries to fulfill all the columns "left to right". next error would be about not enough values provided for table columns. Currently it tries to post @UserID into PO2.ID, @SupplierID into PO2.UserID and so on.

Ivan Starostin
  • 8,798
  • 5
  • 21
  • 39
0

Thank you for answering guys really appreciate it! Forgive my questions because i am super new to hard codes c# and asp.net

i just followed the answer of mr @Ivan Starostin

 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)";

did it like this and fixed some column insert statement and worked!