dapper是否会自动修剪插入数据库的字符串?

时间:2018-12-12 20:20:26

标签: .net sql-server dapper

我使用.net作为后端,使用SQL Server作为数据库。我将以两种方式将记录插入数据库中,第一种方式是使用crud操作,第二种方式是使用SQL Server存储过程(使用dapper调用)。

使用Dapper时,长字符串会自动修剪,但是使用Crud操作时,插入失败,并出现以下错误:

  

字符串或二进制数据将被截断

我只想知道Dapper是否负责自己修剪这些字符串。

代码如下:

int result = await unitOfWork.GetService<IUserService>().AddUserAsync(userModel); // here I get an error during insert

在这里使用dapper:

return await GetDapper().ExcecuteScalarAsync<int>("dbo.insert_user", new { @userId = userId, @userName = userName });

1 个答案:

答案 0 :(得分:1)

静默截断不是由Dapper完成,而是由SQL Server中的存储过程完成。您可以轻松地测试一下:当字符串太长时,CRUD操作会出错,但是存储过程却不会:

            TransactionHistories = new TransactionHistories();
            TransactionTypes = new TransactionTypes();

            if (!ModelState.IsValid)
            {
                return Page();
            }

            SavingAccounts.Balance = SavingAccounts.Balance - Amount;
            CheckingAccounts.Balance = CheckingAccounts.Balance + Amount;

            //TransactionHistories.TransactionId = TransactionHistories.TransactionId + 1;
            TransactionHistories.TransactionDate = DateTime.Now;
            TransactionHistories.CheckingAccountNumber = CheckingAccounts.CheckingAccountNumber;
            TransactionHistories.SavingAccountNumber = SavingAccounts.SavingAccountNumber;
            TransactionHistories.Amount = Amount;
            TransactionHistories.Transactionfee = 0;
            TransactionHistories.TransactionType = "SavingToChecking";

关于这种行为的讨论很多。例如:SQL Server silently truncates varchar's in stored procedures