Про науку  Про жизнь  Про IT  Про спорт  Про книги  Разное

Проекты: Эйнштейны

Изменение данных в гриде (GridView) в SharePoint в связке с БД Oracle

Есть SharePoint 2007, есть БД на Oracle.

Выводим данные на странице с помощью asp:GridView, к базе данных подключаемся через asp:SqlDataSource.

SqlDataSource:

<asp:SqlDataSource
    runat="server"
    id="SqlDataSource1"
    ProviderName="System.Data.OracleClient"
    ConnectionString="Data Source=IP:PORT/SID;Persist Security Info=True;User ID=sharepoint;Password=sharepoint;Unicode=True"
    ConflictDetection="OverwriteChanges"
    SelectCommand="SELECT id, a, b, c FROM abc"
    UpdateCommand="UPDATE abc SET a = :A, b = :B WHERE id = :ID">
            
    <UpdateParameters>
        <asp:Parameter Name="ID" Type="Int32" />
        <asp:Parameter Name="A" Type="DateTime" />
        <asp:Parameter Name="B" Type="DateTime" />
        <asp:Parameter Name="C" Type="String" />
    </UpdateParameters>
            
</asp:SqlDataSource>

GridView:

<asp:GridView runat="server" id="GridView1" DataSourceID="SqlDataSource1" AutoGenerateColumns="false" DataKeyNames="ID" AutoGenerateEditButton="True">
    <Columns>
        <asp:commandfield ShowDeleteButton="True" ShowEditButton="True" Visible="false"></asp:commandfield>
        <asp:boundfield DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" Visible="False"></asp:boundfield>
        <asp:boundfield DataField="A" DataFormatString="{0:d}" HeaderText="ACaption" SortExpression="A"></asp:boundfield>
        <asp:boundfield DataField="B" DataFormatString="{0:d}" HeaderText="BCaption" SortExpression="B"></asp:boundfield>
        <asp:boundfield DataField="C" HeaderText="CCaption" SortExpression="C"></asp:boundfield>
    </Columns>

    <HeaderStyle ForeColor="#FFFFFF" BackColor="#666666" BorderColor="#666666" />
    <RowStyle CssClass="light"/>
    <AlternatingRowStyle CssClass="dark"/>    
</asp:GridView>

Все работает прекрасно, пока не собираемся изменять данные в этом же гриде. При попытке изменить данные выдается ошибка ORA-01036: illegal variable name/number. Всякие вразумительные попытки ее побороть ни к чему не приводят.

Оказывается, чтобы работал update необходимо, чтобы в тексте UpdateCommand участвовали все те же столбцы, что и в SelectCommand. Если будет не хватать хотя бы одного столбца — запрос не проходит. Соответственно, изменения претерпевает только текст UpdateCommand в SqlDataSource. И все начинает работать.

Было так:

UPDATE abc SET a = :A, b = :B WHERE id = :ID

Нужно так:

UPDATE abc SET a = :A, b = :B, c = :C WHERE id = :ID

Как изменить такое поведение — непонятно.

Отправить
Поделиться