는 asp.net 응용 프로그램을하고 삽입, 업데이트를 작성하고 세부 사항ASP.NET은 - 도대체
를 볼 수에 대한 삭제 작업을하고이 캐스트 오류의 원인이 무엇 내 삽입이 잘 작동, 지금은 할 노력하고있어 업데이트,하지만 업데이트 버튼을 누르면 YSOD가 표시됩니다. 양식에 단 하나의 날짜가 있으며 삽입 및 편집을 위해 정확히 동일한 템플리트를 사용합니다. 다음은 ASP와 스택 추적과 내가 그것을 볼 수있는 것은이 시점에서 내 잠수정의에없는에서 '날짜 시간'에서 'INT32'에서
<asp:DetailsView ID="dvInvoice" runat="server" Height="50px" Width="250px" DataSourceID="odsInvoices" AutoGenerateRows="False" DataKeyNames="ID">
<Fields>
<asp:TemplateField HeaderText="ID" InsertVisible="False" SortExpression="ID">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="TripNo" SortExpression="TripNo">
<EditItemTemplate>
<asp:TextBox ID="txtTripNo" runat="server" Text='<%# Bind("TripNo") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="txtTripNo" runat="server" Text='<%# Bind("TripNo") %>'></asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="rfvTripNo" runat="server"
ErrorMessage="An trip no must entered"
ControlToValidate="txtTripNo"
Display="Dynamic">
</asp:RequiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("TripNo") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="TypeID" SortExpression="TypeID">
<InsertItemTemplate>
<asp:DropDownList ID="ddLineTypes"
runat="server"
SelectedValue='<%# Bind("TypeID")%>'
DataSourceID="odsLineTypes"
DataTextField="TypeDesc"
DataValueField="TypeID"
AppendDataBoundItems="True" AutoPostBack="True" OnSelectedIndexChanged="Type_Change"
>
<asp:ListItem Value="-1" Selected="True">Select a Type</asp:ListItem>
</asp:DropDownList>
<br />
<asp:CompareValidator ID="cvLineTypes" runat="server"
ControlToValidate="ddLineTypes" CssClass="ErrorClass"
ErrorMessage="Please Select a Type"
ValidationGroup="vDetailErrors" ValueToCompare="-1" Operator="NotEqual"
Display="Dynamic"></asp:CompareValidator>
<asp:ObjectDataSource ID="odsLineTypes" runat="server" OldValuesParameterFormatString="original_{0}" TypeName="LineTypesBLL" SelectMethod="GetLineTypes">
<SelectParameters>
<asp:Parameter DefaultValue="True" Name="InvOnly" Type="Boolean" />
</SelectParameters>
</asp:ObjectDataSource>
</InsertItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddLineTypes"
runat="server"
SelectedValue='<%# Session("CurrType")%>'
DataSourceID="odsLineTypes"
DataTextField="TypeDesc"
DataValueField="TypeID"
AppendDataBoundItems="True" AutoPostBack="True" OnSelectedIndexChanged="Type_Change"
>
</asp:DropDownList>
<br />
<asp:CompareValidator ID="cvLineTypes" runat="server"
ControlToValidate="ddLineTypes" CssClass="ErrorClass"
ErrorMessage="Please Select a Type"
ValidationGroup="vDetailErrors" ValueToCompare="-1" Operator="NotEqual"
Display="Dynamic"></asp:CompareValidator>
<asp:ObjectDataSource ID="odsLineTypes" runat="server" OldValuesParameterFormatString="original_{0}" TypeName="LineTypesBLL" SelectMethod="GetLineTypes">
<SelectParameters>
<asp:Parameter DefaultValue="True" Name="InvOnly" Type="Boolean" />
</SelectParameters>
</asp:ObjectDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("TypeID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="VendorID" SortExpression="VendorID">
<EditItemTemplate>
<asp:DropDownList ID="ddVendors"
runat="server"
SelectedValue='<%# Bind("VendorID")%>'
DataSourceID="odsVendors"
DataTextField="Name"
DataValueField="VendorID"
AppendDataBoundItems="True"
AutoPostBack ="True">
<asp:ListItem Value="-1">Select a Vendor</asp:ListItem>
</asp:DropDownList>
<br />
<asp:CompareValidator ID="cvVendors" runat="server"
ControlToValidate="ddVendors" CssClass="ErrorClass"
ErrorMessage="Please Select a Vendor"
ValidationGroup="vDetailErrors" ValueToCompare="-1" Operator="NotEqual"
Display="Dynamic"></asp:CompareValidator>
<asp:ObjectDataSource ID="odsVendors" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetVendors" TypeName="VendorsBLL"></asp:ObjectDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("VendorID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="InvNo" SortExpression="InvNo">
<EditItemTemplate>
<asp:TextBox ID="txtInvNo" runat="server" Text='<%# Bind("InvNo") %>'></asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="rfvInvNo" runat="server"
ErrorMessage="An invoice number must be entered"
ControlToValidate="txtInvNo"
Display="Dynamic">
</asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("InvNo") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="InvAmount" SortExpression="InvAmount">
<EditItemTemplate>
<asp:TextBox ID="txtInvAmount" runat="server" Text='<%# Bind("InvAmount") %>'></asp:TextBox>
<br />
<asp:RequiredFieldValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="rfvInvAmount" runat="server"
ErrorMessage="An invoice amount must be entered"
ControlToValidate="txtInvAmount"
Display="Dynamic"></asp:RequiredFieldValidator>
<br />
<asp:CompareValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="cvInvAmount" runat="server"
ControlToValidate="txtInvAmount"
ErrorMessage="A numeric Invoice Amount MUST be entered"
Operator="DataTypeCheck" Type="Currency"
Display="Dynamic"></asp:CompareValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label6" runat="server" Text='<%# Bind("InvAmount") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="InvDate" SortExpression="InvDate">
<EditItemTemplate>
<asp:TextBox ID="txtInvDate" runat="server" Text='<%# Bind("InvDate") %>'></asp:TextBox>
<br />
<asp:RequiredFieldValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass" ID="rfvInvDate" runat="server"
ErrorMessage="An invoice date must be entered"
ControlToValidate="txtInvDate"
Display="Dynamic">
</asp:RequiredFieldValidator>
<br />
<asp:CustomValidator ValidationGroup="vDetailErrors"
CssClass="ErrorClass"
ID="cvInvDate" runat="server"
ErrorMessage="A valid date within the last two years and no later than next year must be entered"
OnServerValidate="cvInvDate_ServerValidate" ControlToValidate="txtInvDate"
Display="Dynamic">
</asp:CustomValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label7" runat="server" Text='<%# Bind("InvDate") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField CausesValidation="true" ShowEditButton="true" ShowInsertButton="true" ValidationGroup="vDetailErrors" />
</Fields>
</asp:DetailsView>
<p>
<asp:ObjectDataSource ID="odsInvoices" runat="server" InsertMethod="AddInvoice" OldValuesParameterFormatString="original_{0}" SelectMethod="GetInvoicesByTripNo" TypeName="InvoicesBLL" UpdateMethod="UpdateInvoice">
<InsertParameters>
<asp:ControlParameter ControlID="dvInvoice" Name="TripNo" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="dvInvoice" Name="TypeID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="dvInvoice" Name="VendorID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvNo" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvAmount" PropertyName="SelectedValue" Type="Decimal" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvDate" PropertyName="SelectedValue" Type="DateTime" />
<asp:Parameter Name="ID" Type="Int32" />
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="txtLoadNo" Name="TripNo" PropertyName="Text" Type="String" />
</SelectParameters>
<UpdateParameters>
<asp:ControlParameter ControlID="dvInvoice" Name="TripNo" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="dvInvoice" Name="TypeID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="dvInvoice" Name="VendorID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvNo" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvAmount" PropertyName="SelectedValue" Type="Decimal" />
<asp:ControlParameter ControlID="dvInvoice" Name="InvDate" PropertyName="SelectedValue" Type="DateTime" />
<asp:ControlParameter ControlID="dvInvoice" Name="original_ID" PropertyName="SelectedValue" Type="Int32" />
</UpdateParameters>
</asp:ObjectDataSource>
YSOD 오류
잘못된 캐스트. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.
예외 정보 : System.InvalidCastException : 'Int32'에서 'DateTime'으로의 잘못된 캐스트입니다.
소스 오류 :
처리되지 않은 예외가 현재 웹 요청을 실행하는 동안 생성되었습니다. 예외의 출처와 위치에 관한 정보는 아래의 예외 스택 추적을 사용하여 식별 할 수 있습니다.
스택 추적은 : InsertParameters과 UpdateParameters에 대한
[InvalidCastException: Invalid cast from 'Int32' to 'DateTime'.]
System.Int32.System.IConvertible.ToDateTime(IFormatProvider provider) +134
System.Convert.ChangeType(Object value, TypeCode typeCode, IFormatProvider provider) +519
System.Web.UI.WebControls.Parameter.GetValue(Object value, String defaultValue, TypeCode type, Boolean convertEmptyStringToNull, Boolean ignoreNullableTypeChanges) +126
System.Web.UI.WebControls.Parameter.GetValue(Object value, Boolean ignoreNullableTypeChanges) +63
System.Web.UI.WebControls.Parameter.get_ParameterValue() +40
System.Web.UI.WebControls.ParameterCollection.GetValues(HttpContext context, Control control) +247
System.Web.UI.WebControls.ObjectDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +1440
System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +87
System.Web.UI.WebControls.DetailsView.HandleUpdate(String commandArg, Boolean causesValidation) +1091
System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +425
System.Web.UI.WebControls.DetailsView.OnBubbleEvent(Object source, EventArgs e) +89
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent(Object source, EventArgs e) +80
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +121
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +156
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9642338
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
그래서'InvDate'가 데이터베이스에서 잘못 정수로 돌아오고 있는데, 잘못된 열을 선택합니까? –
업데이트/삽입 매개 변수에서 dvInvoice를 여러 번 전달하는 이유는 무엇입니까? 하나의 컨트롤을 사용하여 다른 데이터 유형에 대해 여러 값을 전달했습니다. 이상하게 보입니다. – codingbiz
@Karl, 어디서 볼지에 대해 약간의 혼란이있었습니다. 삽입 및 업데이트와 삽입에 모두 동일한 데이터 소스가 작동합니다. 코드를 단계별로 실행하면 날짜에 대한 사용자 지정 유효성 검사기를 지나치고 (알 수없는 이유로 3 번 유효성 검사기를 실행 함) YSOD가 표시됩니다. 업데이트 방법이 BLL 에까지 미치지도 않습니다. DB에서 읽는 것이 있습니까? – mark1234