为什么参数值没有从 C# 代码传递到存储过程

时间:2021-04-24 18:24:44

标签: sql-server blazor-server-side

我有一个 C# blazor 应用程序,它调用一个服务,而该服务又调用一个存储过程。当应用程序调用该服务时,一个 csv 字符串被传递给该服务,该服务应将参数值传递给存储过程。

然而,这似乎并没有发生。当我调试 C# 代码时,成功创建了 CSV 字符串,并且该字符串确实成功地传递给了服务。在 SSMS 中执行时,存储过程本身确实有效。似乎服务将 csv 字符串传递给存储过程的步骤似乎不起作用。

以下是: 调用服务的应用代码

public async Task SelectProcesses()
{
    var SelectedData = await PRDSRVGrid.GetSelectedRecords();
    foreach (var a in SelectedData) { IDValue.Add(a.PRODSERVID); }
    string csvstring = (string.Join(",", IDValue.Select(x => x.ToString())));
    SelectedProductsServices = csvstring;

    processes = await SelectSpecificProcessesService.GetSpecificProcesses(@SelectedProductsServices);
    return;
}

服务本身:

using Dapper;
using Microsoft.Data.SqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;

namespace ThePositionerBlazorServerDapperSyncfusion.Data
{
    public class SelectSpecificProcessesService : ISelectSpecificProcessesService
    {
        private readonly SqlConnectionConfiguration _configuration;
        public SelectSpecificProcessesService(SqlConnectionConfiguration configuration)
        {
            _configuration = configuration;
        }

        public async Task<IEnumerable<PROCESSES>> GetSpecificProcesses(string @SelectedProductsServices)
        {
                    IEnumerable<PROCESSES> processes;
        using (var conn = new SqlConnection(_configuration.Value))
            {
                var parameters = new DynamicParameters();
                parameters.Add("(@SelectedProductsServices", SelectedProductsServices, DbType.String);

                //await conn.ExecuteAsync("SelectSpecificProcesses", parameters, commandType: CommandType.StoredProcedure);

                processes = await conn.QueryAsync<PROCESSES>("SelectSpecificProcesses", parameters, commandType: CommandType.StoredProcedure);
               
            }
            return processes;
        }
    }
}

和存储过程:

USE [WorkManagerV6]
GO
/****** Object:  StoredProcedure [dbo].[SelectSpecificProcesses]    Script Date: 4/24/2021 11:01:58 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SelectSpecificProcesses]
    @SelectedProductsServices nvarchar(4000)
AS
    SELECT PROCESSID, PROCESSDESC, LASTUPDATED
    FROM PROCESSES
    WHERE PROCESSID IN (
        SELECT PROCESSID
        FROM WORKHIER W
        JOIN iter_charlist_to_tbl(@SelectedProductsServices, DEFAULT) s
            ON w.PRODSERVID = s.nstr
    )

    RETURN 

它抱怨未提供 @SelectedProductsServices - SQL Server 错误。

任何建议都会有所帮助。提前致谢...

1 个答案:

答案 0 :(得分:0)

这是斯图的回答

结果是 Stu 发现了这个问题——它是 parameter.add 语句中的额外括号——谢谢!

相关问题