Входная строка была в неправильном формате vb.net/asp.net

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

Вот мой formview..

 <asp:FormView ID="FormView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="recid">
<EditItemTemplate>
RECID:
<asp:TextBox ID="recid" runat="server" Text='<%# Eval("RECID") %>' ReadOnly="true" />
<br />
SHIPPER:
<asp:TextBox ID="shipper" runat="server" Text='<%# Bind("SHIPPER") %>' />
<br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="Update" />
amp;nbsp;
<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
</asp:FormView>
  

вот мой sqldatasource1

 <asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT * FROM IMPORT WHERE (RECID = ?)"
UpdateCommand="UPDATE IMPORT SET SHIPPER=@shipper WHERE RECID=@recid" >
<SelectParameters>
<asp:ControlParameter ControlID="Label1" Name="RECID" PropertyName="Text" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="recid" Type="Int32" />
<asp:Parameter Name="shipper" Type="String" />
</UpdateParameters>
</asp:SqlDataSource> 
  

Теперь моя проблема в том, что каждый раз, когда я обновляю страницу, это ошибка, строка ввода была не в правильном формате.

Я попытался изменить @recid в UpdateCommand на постоянное UpdateCommand=»ОБНОВИТЬ ИМПОРТНЫЙ НАБОР SHIPPER=@shipper ГДЕ RECID= 11186″ это сработало хорошо, обновление прошло успешно.

Я думаю, что @recid обрабатывается как строка здесь, в UpdateCommand. Может кто-нибудь, пожалуйста, помогите мне? Что мне нужно сделать, чтобы изменить тип данных @recid на Integer ?

Спасибо!

Комментарии:

1. Каков тип данных RECID в базе данных?

2. привет! RECID — целое число, автоматически увеличивается в базе данных, это первичный ключ.

Ответ №1:

Первое, что вам нужно исправить, это связать raceid с текстовым полем, как показано ниже:

 <asp:TextBox ID="recid" runat="server" Text='<%# Bind("RECID") %>' ReadOnly="true" />
  

Теперь возникает вопрос о поставщике. В используемой вами команде select используется RACEID = ? ? для OleDb или Odbc . Если вы используете какой-либо из них, вам необходимо изменить команду обновления на это:

 UpdateCommand="UPDATE IMPORT SET SHIPPER=? WHERE RECID=?"
  

И обновите параметры до этого (обратите внимание на их порядок):

 <UpdateParameters>
    <asp:Parameter Name="shipper" Type="String" />
    <asp:Parameter Name="recid" Type="Int32" />
</UpdateParameters>
  

Я бы рекомендовал прочитать эту статью MSDN: использование параметров с элементом управления SqlDataSource

Комментарии:

1. большое вам спасибо за это, сэр! 🙂 я с трудом решал эту проблему в течение недели, я думаю? мой вопрос в том, почему вместо BIND это был EVAL? но опять же, большое вам спасибо!

2. Eval это один из способов привязки для отображения данных. Bind работает в обоих направлениях, от источника к элементу управления и от элемента управления к источнику.