我使用.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 });
答案 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。