Зацикливание моего CheckBoxList вставляет только одну запись - PullRequest
1 голос
/ 25 августа 2011

Заголовок говорит о моей проблеме - мои флажки будут вставлять только одну запись за раз. Появляется модальное окно, и я нажимаю 2 флажка, но только один из них вставляется в мою базу данных и отображается на моей странице. Я должен поставить галочки за один раз, и у меня есть много, много флажков. Вот код, который у меня есть. :) Заранее спасибо

<!-- Add a Feature -->
    <li>
        <asp:LinkButton ID="FeatureButton" runat="server">Feature</asp:LinkButton>
        <asp:Panel ID="FeaturePanel" runat="server" CssClass="modalPopup" Style="display:none">
            <asp:CheckBoxList ID="cbxAddFeature" runat="server" DataSourceID="dsNewFeatures" DataTextField="FeatureTitle" DataValueField="FeatureID"></asp:CheckBoxList>
            <asp:Button ID="SubmitFeatures" runat="server" Text="Submit" /><asp:Button ID="CancelSubmitFeatures" runat="server" Text="Cancel" />
        </asp:Panel>
        <asp:ModalPopupExtender ID="FeatureModal" runat="server" BackgroundCssClass="modalBackground" CancelControlID="CancelSubmitFeatures" DropShadow="True" DynamicServicePath="" Enabled="True" PopupControlID="FeaturePanel" TargetControlID="FeatureButton"></asp:ModalPopupExtender>
    </li>

Protected Sub SubmitFeatures_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SubmitFeatures.Click
  FeatureModal.Hide()
    For Each feature As ListItem In cbxAddFeature.Items
      If feature.Selected Then

       'SQL INSERT: Marketing Table
       Dim strSQL As String = "INSERT INTO Marketing (ProductID, MarketingTypeID, MarketingTitle, MarketingData) VALUES (@ProductID, 3, 'Feature', @MarketingData)"

       Using cn As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString)

       Using cmd As New SqlCommand(strSQL, cn)

        cmd.Parameters.Add(New SqlParameter("@ProductID", ProductID.Value))
        cmd.Parameters.Add(New SqlParameter("@MarketingData", feature.Value))

        cn.Open()

        cmd.ExecuteNonQuery()
        End Using
       End Using
End If
Next
 Response.Redirect(Request.RawUrl)
End Sub

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

Не перенаправлять после первого прохода в цикле:

For Each feature As ListItem In cbxAddFeature.Items
        If feature.Selected Then
            Dim sqlAddFeatures As String = Nothing
            'SQL INSERT: Marketing Table
            sqlAddFeatures = "INSERT INTO Marketing (ProductID, MarketingTypeID, MarketingTitle, MarketingData) VALUES (" & ProductID.Value & ",3, 'Feature', " & feature.Value & ")"
            sqlAddFeatures.Replace("'", "''")
            Dim SqlConnection As New SqlConnection("Server=off-db1;uid=productsDB_admin;pwd=*****;database=Products")
            SqlConnection.Open()
            Dim sqlCommand As New SqlCommand(sqlAddFeatures, SqlConnection)
            sqlCommand.ExecuteNonQuery()
            SqlConnection.Close()
            'Response.Redirect(Request.RawUrl) 
        End If
    Next
0 голосов
/ 25 августа 2011

jlg, вы не сможете вставить все строки одним выстрелом в SQL.Вы не указали, какую версию SQL вы используете, но в SQL Server 2008 вы можете передавать параметры DataTable в хранимую процедуру, а затем вставлять все записи одновременно.

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

Или, если вы не хотите идти по этому пути ...

Вы можете по крайней мере использовать транзакции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...