Изменение данных в гриде (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Как изменить такое поведение — непонятно.