Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何向要删除的存储过程传递sql参数的字符串列表?_C#_Sql_Asp.net Core_Asp.net Core Webapi - Fatal编程技术网

C# 如何向要删除的存储过程传递sql参数的字符串列表?

C# 如何向要删除的存储过程传递sql参数的字符串列表?,c#,sql,asp.net-core,asp.net-core-webapi,C#,Sql,Asp.net Core,Asp.net Core Webapi,我有下面的方法,该方法应该从作为参数传入的列表中给定的数据库中删除假日名称。我遇到的问题是它没有从数据库中删除任何内容。以下是我遇到问题的部分方法: private void RemoveGloOrderDays(List<SessionInfoList> sessionList, List<Holiday> selectedOrderHolidays, List<Holiday> selectedHolidays, List<string> or

我有下面的方法,该方法应该从作为参数传入的列表中给定的数据库中删除假日名称。我遇到的问题是它没有从数据库中删除任何内容。以下是我遇到问题的部分方法:

private void RemoveGloOrderDays(List<SessionInfoList> sessionList, List<Holiday> selectedOrderHolidays, List<Holiday> selectedHolidays, List<string> orderDays, List<string> noOrderDays)
        {
            try
            {
                using (SqlCommand cmd = new SqlCommand())
                using (SqlConnection connection = new SqlConnection(ConnectionString))
                {
                    cmd.CommandTimeout = 600;
                    cmd.CommandText = "[dbo].[RemoveGlobalOrderDays]";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Connection = connection;
                    cmd.Parameters.Add("@SessionId", SqlDbType.Int);
                    cmd.Parameters.Add("@SelectedOrderHolidays", SqlDbType.NVarChar);
                    cmd.Parameters.Add("@SelectedHolidays", SqlDbType.NVarChar);
                    cmd.Parameters.Add("@OrderDays", SqlDbType.NVarChar);
                    cmd.Parameters.Add("@NoOrderDays", SqlDbType.NVarChar);

                    connection.Open();

                    foreach (SessionInfoList session in sessionList)
                    {
                        cmd.Parameters["@SessionId"].Value = session.SessionID;

                        cmd.Parameters["@SelectedOrderHolidays"].Value = DBNull.Value;
                        string joinedNames = string.Join(",", selectedOrderHolidays.Select(h => h.Name.Trim()));
                        if (!string.IsNullOrEmpty(joinedNames))
                        {
                            cmd.Parameters["@SelectedOrderHolidays"].Value = joinedNames;
                        }

                        cmd.Parameters["@SelectedHolidays"].Value = DBNull.Value;
                        joinedNames = string.Join(",", selectedHolidays.Select(h => h.Name.Trim()));
                        if (!string.IsNullOrEmpty(joinedNames))
                        {
                            cmd.Parameters["@SelectedHolidays"].Value = joinedNames;
                        }

您可以对参数@Selectedholidays和@selectedorderholidays使用表值参数,然后类似于

DELETE [SessionHolidayMapping] FROM [SessionHolidayMapping] A
    Inner join @selectedholidays S
    On A.[HolidayName] = S.Holidayname where A.[SessionId] = @SessionId.
“HolidayName”是参数的一列


我正在使用手机,无法对其进行适当的测试。

您可以使用表值参数@Selectedholidays和@selectedorderholidays等参数,而不是使用nvarchar

DELETE [SessionHolidayMapping] FROM [SessionHolidayMapping] A
    Inner join @selectedholidays S
    On A.[HolidayName] = S.Holidayname where A.[SessionId] = @SessionId.
“HolidayName”是参数的一列


我正在使用手机,无法对其进行适当测试。

据我所知,您正在传递用逗号分隔的姓名列表,并且希望删除所有这些姓名。您需要使用IN运算符查找所有应删除的假日名称

以下是如何为@SelectedHolidays执行此操作的示例:

declare @SelectedHolidays nvarchar(500) = 'H1,H2,H3'
declare @SelectedHolidaysXml xml = cast(replace(N'<R><I>' + @SelectedHolidays + N'</I></R>', ',', '</I><I>') as xml)


DELETE FROM [SessionHolidayMapping]
WHERE [HolidayName] in (select x.items.value('(.)[1]', 'NVARCHAR(500)') from @SelectedHolidaysXml.nodes('/R/I') as x(items))
AND [SessionId] = @SessionId
declare@SelectedHolidays nvarchar(500)='H1、H2、H3'
声明@SelectedHolidaysXml=cast(将(N'+@SelectedHolidays+N'',','',''替换为xml)
从[SessionHolidayMapping]中删除
其中,[HolidayName]在(从@SelectedHolidaysXml.nodes('/R/I')中选择x.items.value('(..[1]','NVARCHAR(500'))作为x(items))
和[SessionId]=@SessionId

这很难看,但我不知道有什么更好的方法可以在sql server中拆分逗号分隔的值。

据我所知,您正在传递以逗号分隔的名称列表,并且希望删除所有这些名称。您需要使用IN运算符查找所有应删除的假日名称

以下是如何为@SelectedHolidays执行此操作的示例:

declare @SelectedHolidays nvarchar(500) = 'H1,H2,H3'
declare @SelectedHolidaysXml xml = cast(replace(N'<R><I>' + @SelectedHolidays + N'</I></R>', ',', '</I><I>') as xml)


DELETE FROM [SessionHolidayMapping]
WHERE [HolidayName] in (select x.items.value('(.)[1]', 'NVARCHAR(500)') from @SelectedHolidaysXml.nodes('/R/I') as x(items))
AND [SessionId] = @SessionId
declare@SelectedHolidays nvarchar(500)='H1、H2、H3'
声明@SelectedHolidaysXml=cast(将(N'+@SelectedHolidays+N'',','',''替换为xml)
从[SessionHolidayMapping]中删除
其中,[HolidayName]在(从@SelectedHolidaysXml.nodes('/R/I')中选择x.items.value('(..[1]','NVARCHAR(500'))作为x(items))
和[SessionId]=@SessionId
这很难看,但我不知道有什么更好的方法可以在sql server中拆分逗号分隔的值