ExecuteAsync Изменения Переданные Имена Динамических Параметров - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь вставить данные формы в таблицу с помощью хранимой процедуры, вызвав метод ExecuteAsync из Dapper. После отправки имена параметров изменены.

public static async Task<bool> Insert(DynamicParameters dp)
{
    int IsSuccessed;
    using (SqlConnection c = new SqlConnection(con))
    {
        IsSuccessed = await c.ExecuteAsync("AddStudent", dp, commandType: CommandType.StoredProcedure);
    }
    return IsSuccessed > 0 ? true : false;
}

Параметры изменены, показывая в SQL Server Profiler

declare @p8 nvarchar(100)
set @p8=NULL
exec AddStudent @Name1=N'Ahmad',@TazkiraNumber1=N'890',@TazkiraPage1=N'0987',@TazkiraVolume1=N'8',@GenderID1=N'1',@VisitorSourceID1=N'2',@msg=@p8 output
select @p8

Следующий код создает динамические параметры из коллекции форм:

var dp = new DynamicParameters();
foreach (string key in form.Keys)
{
    dp.Add(key.ToString(), form[key]);
}

Я получаю данные формы с помощью IFormCollection и создаю DynamicParameters из ключа и значения коллекции форм и передаю динамический параметр в метод ExecuteAsync, и он вызывает хранимую процедуру для вставки данных в таблицы. Процесс выполнения хранимой процедуры завершается неудачей.

Я запустил профилировщик SQL-сервера и заметил, что 1 добавляется к каждому параметру, когда @Name становится @ Name1.

Есть идеи, почему это происходит?

1 Ответ

0 голосов
/ 10 июня 2019

Для этой проблемы это вызвано тем, что StringValues не удалось преобразовать в DbType.

Попробуйте код ниже:

    foreach (string key in form.Keys)
    {
        dp.Add(key.ToString(), form[key].ToString());
    }
...