【发布时间】:2021-12-06 06:51:41
【问题描述】:
我有两个相关的表,第一个名为 postaDip (IDpostaDip, CODdip, CODposta, from),第二个名为 cassPosta (IDposta, Desc)。
我正在尝试通过加载表cassPosta 的列表框将多行插入postaDip 表。例如,我想插入与我在列表框中选择的 ID 一样多的多行。使用此代码我正在尝试,如果我在列表框中只选择一项,相同的一项,它会重复插入 2 次。如果我选择多个元素,则只输入一个,两次!
标记:
<asp:DropDownList ID="sel_dip" CssClass="chzn-select" Width="50%"
runat="server" DataSourceID="SqlDataSource1"
DataTextField="nomecogn" DataValueField="IDdipendenti"
ValidateRequestMode="Enabled">
<asp:ListItem Text="Seleziona Dip" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:TextBox runat="server" id="sel_data" CssClass="form-control" clientidmode="static" Width="20%" ></asp:TextBox>
<asp:ListBox ID="ListBox1" runat="server" SelectionMode="Multiple" AppendDataBoundItems="true" DataSourceID="SqlDataSource2" DataTextField="Desc" DataValueField="IDposta" ></asp:ListBox>
<asp:button ID="btnAssPc" runat="server" OnClick="btnAssPc_Click"/>
后面的代码:
Protected Sub ass_postaDip()
For Each selectedItem As Object In ListBox1.SelectedValue
Dim cmdText As String = "Sp_ass_postaDip2"
Dim postaid As Integer = Int32.Parse(selectedItem.ToString())
Using Myconnection As New SqlConnection(SqlContConnStrinG), command As New SqlCommand(cmdText, Myconnection), da As New SqlDataAdapter(command)
Myconnection.Open()
command.CommandType = CommandType.StoredProcedure
command.Parameters.Add("@CodDip", SqlDbType.Int).Value = sel_dip.Text
command.Parameters.Add("@CodPosta", SqlDbType.Int).Value = postaid
command.Parameters.Add("@Data", SqlDbType.Date).Value = sel_data.Text
command.ExecuteNonQuery()
Dim dst As New DataSet
da.Fill(dst)
Myconnection.Close()
End Using
Next
End Sub
这是存储过程
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Sp_ass_postaDip2]
@CodDip int,
@CodPosta int,
@Data date
AS
BEGIN
SET NOCOUNT OFF;
INSERT INTO postaDip (CODdip, CODposta, from)
VALUES (@CodDip, @CodPosta, @Data);
END
【问题讨论】:
-
在
json上设置值并将 jason 传递给 SP,在 SP 中使用openjson并选择将数据插入表中 -
谢谢@Amirhossein,我从来没有使用过openjson函数,你能更好地解释一下怎么做吗?
-
尝试使用列表并将其发送到SQL服务器并通过批量插入插入到数据库中。
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
你为什么有
SET NOCOUNT OFF?
标签: sql asp.net sql-server stored-procedures