2015-12-02 2 views
0

Я унаследовал некоторый ASP.NET код, который мне нужно обновить что привело к моей необходимости изменить жесткий кодированный SQL Update заявления АГУ SqlDataSource «s UpdateCommandType из строки () в хранимую процедуру, содержащую инструкцию Update.SqlDataSource UpdateParameters - Входная строка не была в правильном формате

Строка выполняется отлично и использует параметры, которые привязаны к элементам управления в представлении деталей (я знаю, что это не лучшая практика, и мне больно работать с подключениями данных с клиентской стороны ...! Но у меня нет время для повторной записи всех подключений к данным для этого и многих страниц).

Во всяком случае, я просто изменил UpdateCommand хранимой процедуры, которая делает то же самое, и я просто получаю ошибку

Строка ввода не был в правильном формате.

при попытке обновить на странице.

Я могу предоставить код, если требуется, но он большой & ужасно, поэтому я предварительно спрашиваю, есть ли у кого-нибудь какие-либо первоначальные идеи? Я поставил несколько маленьких бит ниже. Я смотрел на UpdateParameterCollection, так как мне интересно, когда коллекция параметров кэшируется где угодно, но ничего не видит.

У меня есть элементы управления, связанные с DataSource элементов, как так:

<EditItemTemplate> 
    <asp:CheckBox ID="chkNonReview" runat="server" Checked='<%# Bind("NonReview") %>' /> 
</EditItemTemplate> 

И SqlDataSource было изменено от этого ...

<asp:SqlDataSource ID="dsEventDV" runat="server" 
    ConnectionString="<%$ ConnectionStrings:MyConnString %>" 
    DeleteCommand="DELETE FROM [I_TRAINEE_EVENTS] WHERE [EVENTID] = @EVENTID" 
    InsertCommand="INSERT_TRAINEE_EVENTS_ED3" 
         InsertCommandType="StoredProcedure" 
    OnInserted="DSEvent_Inserted" 
    SelectCommand="Get_Candidate_Events_I3" 
    SelectCommandType="StoredProcedure" 
    UpdateCommand="UPDATE I_TRAINEE_EVENTS (etc...)" 
..... 

к этому:

<asp:SqlDataSource ID="dsEventDV" runat="server" 
    ConnectionString="<%$ ConnectionStrings:MyConnString %>" 
    DeleteCommand="DELETE FROM [I_TRAINEE_EVENTS] WHERE [EVENTID] = @EVENTID" 
    InsertCommand="INSERT_TRAINEE_EVENTS_ED3" 
    InsertCommandType="StoredProcedure" 
    OnInserted="DSEvent_Inserted" 
    SelectCommand="Get_Candidate_Events_I3" 
    SelectCommandType="StoredProcedure" 
    UpdateCommand="UPDATE_TRAINEE_EVENTS" 
    UpdateCommandType="StoredProcedure"> 
..... 

С новыми значениями UpdateCommand.

Параметры обновления:

<UpdateParameters> 
    <asp:Parameter Name="EVENTID" Type="Int32"/> 
    <asp:Parameter Name="EVENTTYPEID" Type="Int32"/> 
    <asp:Parameter Name="EVENTDATE" Type="DateTime"/> 
    <asp:Parameter Name="STAFFID" Type="Int32"/> 
    <asp:Parameter Name="REVIEWNO" Type="Int32"/> 
    <asp:Parameter Name="COMMENTS" Type="String"/> 
    <asp:Parameter Name="DESTINYVERIFIED" Type="Int32"/> 
    <asp:Parameter Name="DESTINYVERIFIEDBY" Type="Int32"/> 
    <asp:Parameter Name="DESTINYVERIFIEDDATE" Type="DateTime"/> 
    <asp:Parameter Name="REASONFORSUSPENSIONID" Type="Int32"/> 
    <asp:Parameter Name="RETURNTOWORKDATE" Type="DateTime"/> 
    <asp:Parameter Name="ContactDetailsUpdated" Type="Int32"/> 
    <asp:Parameter Name="RETENTION_STATUS_ID" Type="Int32"/> 
    <asp:Parameter Name="RETENTION_REASON_ID" Type="Int32"/> 
    <asp:Parameter Name="NonReview" Type="Int32"/> 
    <asp:Parameter Name="FalsifiedEventReason" Type="Int32"/> 
    <asp:Parameter Name="SusReqReasonID" Type="Int32"/> 
    <asp:Parameter Name="SusReqReturnDate" Type="DateTime"/> 
</UpdateParameters> 

Сохраненная декларация процедура выглядит следующим образом:

CREATE PROCEDURE [dbo].[UPDATE_TRAINEE_EVENTS] 
    @EVENTID    int, 
    @EVENTTYPEID   int, 
    @EVENTDATE    datetime, 
    @STAFFID    int, 
    @REVIEWNO    int, 
    @COMMENTS    varchar(2100), 
    @DESTINYVERIFIED  int, 
    @DESTINYVERIFIEDBY  int, 
    @DESTINYVERIFIEDDATE datetime, 
    @REASONFORSUSPENSIONID int, 
    @RETURNTOWORKDATE  datetime, 
    @ContactDetailsUpdated int, 
    @RETENTION_STATUS_ID int, 
    @RETENTION_REASON_ID int, 
    @NonReview    int, 
    @FalsifiedEventReason int, 
    @SusReqReasonID   int, 
    @SusReqReturnDate  datetime 
AS 
    ...... 

Я также запустить SQL Server Profiler на сессии, чтобы увидеть, что передается в базу данных, однако ошибка возникает, прежде чем что-либо попадет в базу данных, которая, как представляется, указывает на то, что проблема находится в стороне от ASP.NET.

+0

Pls проверить значение и поле типа данных ... –

+0

К сожалению, я должен отметить, что я пошел за многочисленные типы данных раз, чтобы проверить, они весь матч .. Для насколько я изменил все на Strings и Varchars в SP) ... Я даже гарантировал, что параметры находятся в том же порядке выше, что и в SP (поскольку я знаю, что некоторые устройства для подключения к данным требуют этого) ... – CJH

+0

Обновлены приведенные выше примеры кода, чтобы включить полные параметры обновления и объявление SP. – CJH

ответ

0

Ваш <asp:Parameter Name="EVENTID" /> должен иметь тип данных. Я думаю, что это должно быть так ..

<asp:Parameter Name="EVENTID" Type="Int32" /> 
+0

А я копировал в плохом образце - я много делал и пропустил его в фрагменте ...Достаточно сказать, что даже с объявлением типа данных, о котором вы говорили, у меня такая же проблема ... – CJH

+0

Я также разделил параметры до одного, чтобы увидеть, был ли один из них причиной проблемы, но просто продолжайте получать ту же ошибку. Я даже попытался установить NO Update Parameters и удалить их из SP ... Когда я это сделаю, я получаю сообщение об ошибке, указывающее, что SP не требует параметров, но они передаются ... Даже когда я не объявлял какой-либо. Поэтому я задаюсь вопросом, эффективно ли привязка управления эффективно создает параметр? – CJH

+0

Вы уверены, что EVENTID имеет значение? Ваша ошибка кажется очевидной. Это либо не целое, либо пустое значение. @ChrisHill – ninja

Смежные вопросы