クエリ文字列を介して渡された値に応じて、ユーザーがデータベースにレコードを挿入できるページを作成しようとしています。クエリ文字列には、挿入しようとしている SQL 列と一致する ProductID というキーが含まれています。
URL は常に次のようになります。ViewProductDetails.aspx?ProductID=1 この指定された製品 ID を使用してページもエントリを読み込むため、クエリ値が設定されていることを確認できます。
私が言ったように、うまくいかないのは、データベースにレコードを挿入することです。次の InsertCommand があります。
InsertCommand="INSERT INTO [ProductDetails] ([ProductID], [Color], [Size], [Quantity]) VALUES (@ProductID, @Color, @Size, @Quantity)"
次の挿入パラメーターがあります。
<InsertParameters>
<asp:QueryStringParameter Name="ProductID" QueryStringField="ProductID" Type="Int32" />
<asp:Parameter Name="Color" Type="String" />
<asp:Parameter Name="Size" Type="String" />
<asp:Parameter Name="Quantity" Type="Int32" />
</InsertParameters>
次の DetailsView があります。
<asp:DetailsView ID="InsertDetailsView" runat="server" DataSourceID="ProductDetailsDataSource" Height="50px" Width="500px" AutoGenerateRows="False" DataKeyNames="ProductDetailID" DefaultMode="Insert" HorizontalAlign="Center" OnItemInserted="InsertDetailsView_ItemInserted">
<CommandRowStyle BackColor="#CCFFCC" ForeColor="#663300" />
<FieldHeaderStyle BackColor="#FFFF99" Font-Bold="True" Font-Names="Times New Roman" Width="100px" Wrap="False" />
<Fields>
<asp:TemplateField HeaderText="Size" SortExpression="Size">
<InsertItemTemplate>
<asp:DropDownList ID="SizeDropDown" runat="server" DataSourceID="ProductSizesDataSource" DataTextField="Size" DataValueField="Size" SelectedValue='<%# Bind("ProductSize") %>' />
</InsertItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Color" HeaderText="Color" SortExpression="Color" />
<asp:BoundField DataField="Quantity" HeaderText="Quantity" SortExpression="Quantity" />
<asp:CommandField ShowCancelButton="False" ShowInsertButton="True" />
</Fields>
<RowStyle BackColor="#FFFFCC" />
</asp:DetailsView>
ただし、レコードを挿入しようとすると、次のようになります。
Cannot insert the value NULL into column 'ProductID', table 'devdb.ProductDetails'; column does not allow nulls. INSERT fails.
何らかの理由でクエリ フィールドが無視される原因となる何かが不足している可能性がありますか?