Я пытаюсь использовать свой SqlDataSource
для ввода элементов в базу данных со значениями из TextBox, но ничто не вставляет.
Вот мой SqlDataSource
:
<asp:SqlDataSource ID="SectionDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ORHP_Dev03182014ConnectionString %>" SelectCommand="SELECT DISTINCT SectionItem FROM Core.SectionItem_Lkup">
</asp:SqlDataSource>
<asp:SqlDataSource ID="SectionIDDataSource" runat="server " ConnectionString="<%$ ConnectionStrings:ORHP_Dev03182014ConnectionString %>" InsertCommand="INSERT INTO Core.SectionItem_Lkup(SectionItemID, SectionItem, SectionItemLabel) VALUES (@SectionID, @SectionItem, @SectionItemLabel)" SelectCommand=" SELECT MAX(SectionItemID) + 1 AS SectionItemID FROM [ORHP_Dev03182014].[Core].[SectionItem_Lkup]" OnInserting="Section_OnInserted">
<InsertParameters>
<asp:Parameter Name="SectionID" />
<asp:Parameter Name="SectionItem" />
<asp:Parameter Name="SectionItemLabel" />
</InsertParameters>
</asp:SqlDataSource>
Вот текстовые поля в списке:
<InsertItemTemplate>
<tr style="">
<td>
<asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="Insert" On />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Clear" />
</td>
<td>
<div style="font-size: .8em;">
<asp:FormView ID="SectionIDFormView" runat="server" DataKeyNames="SectionItemID" DataSourceID="SectionIDDataSource">
<ItemTemplate>
<asp:Label ID="SectionIDLabel" runat="server" Text="SectionID" Font-Bold="true" Font-Size="1.2em" />
<asp:TextBox ID="SectionIDTextBox" runat="server" Text='<%# Eval("SectionItemID") %>' Width="50px" />
<asp:Label ID="SectionItemLabel" runat="server" Text="SectionItem" Font-Bold="true" Font-Size="1.2em" />
<asp:TextBox ID="SectionItemTextBox" runat="server" Text="" />
<asp:Label ID="SectionItemSubLabel" runat="server" Text="SectionItem Label" Font-Bold="true" Font-Size="1.2em" />
<asp:TextBox ID="SectionItemLabelTextBox" runat="server" Text="" />
</ItemTemplate>
</asp:FormView>
</div>
</td>
</tr>
</InsertItemTemplate>
Вот мой код:
using (SqlConnection connection = new SqlConnection("Data Source=RCK-HRSA-DB01;Initial Catalog=ORHP_Dev03182014;User ID=userid;Password=password"))
{
try
{
SqlCommand cmd1 = new SqlCommand("INSERT INTO Core.SectionItem_Lkup(SectionItemID, SectionItem, SectionItemLabel) VALUES (" + SectionIDTextBox.Text + ", " + SectionItemTextBox.Text + ", " + SectionItemLabelTextBox.Text + ")");
connection.Open();
cmd1.Connection = connection;
cmd1.CommandType = CommandType.Text;
cmd1.ExecuteNonQuery();
}
catch (Exception ex)
{
}
}
Я что-то упускаю?
Проблема, с которой вы столкнетесь, когда вы идете по маршруту, вы собираетесь найти элементы управления для ваших контрольных параметров. Когда элемент управления находится в пределах элемента управления, связанного с данными, идентификатор не является тем, что вы его объявляете. Это можно увидеть, когда вы просматриваете источник на своей странице после его рендеринга.
Для FormViews обычно это выглядит как нечто вроде SectionIDFormView$SectionIDLabel
, что явно не совпадает с SectionIDLabel
. Таким образом, использование ControlParameter, например, может работать на вас:
<InsertParameters>
<asp:ControlParameter ControlID="SectionIDFormView$SectionIDLabel"
Direction="Input" Name="SectionID" PropertyName="Text" />
</InsertParameters>
В качестве альтернативы, когда нажата кнопка " Insert
в элементе "Список", обработайте событие щелчка и внесите туда вставку. Возьмите вставку от SqlDataSource вместе.
protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.CommandName == "Insert")
{
ListViewItem item = ListView1.InsertItem;
FormView SectionIDFormView = (FormView)item.FindControl("SectionIDFormView");
TextBox SectionIDTextBox = (TextBox)SectionIDFormView.FindControl("SectionIDTextBox");
//Find your other controls
//Do your insert
}
}
Попробуйте использовать параметризованный запрос:
SqlCommand cmd1 = new SqlCommand("INSERT INTO Core.SectionItem_Lkup(SectionItemID, SectionItem, SectionItemLabel) VALUES (@SectionItemID, @SectionItem, @SectionItemLabel)");
cmd1.Parameters.AddWithValue("@SectionItemID", SectionIDTextBox.Text);
cmd1.Parameters.AddWithValue("@SectionItem", SectionItemTextBox.Text);
cmd1.Parameters.AddWithValue("@SectionItemLabel", SectionItemLabelTextBox.Text);
CommandName
?
SectionIDDataSource
аSectionIDDataSource
вашего SqlDataSource являетсяSectionDataSource
. Все ли ваши SqlDataSources совпадают правильно?