【发布时间】:2017-04-10 02:45:13
【问题描述】:
我正在尝试在数据库中搜索最大 ID,然后为每个新条目将其递增 1,如下所示:
var query2 = dbb.Database.SqlQuery<patient_visit>("SELECT MAX(CAST(SUBSTRING(pvid, 3, 10) AS int)) FROM patient_visit");
if (query2 != null)
{
objDetails.pvid = query2.ToString();
objDetails.pvid += 1;
objDetails.pvid = "PV" + objDetails.pvid;
}
string sql = "INSERT INTO patient_visit (pvid,paid) " +
"VALUES('" + objDetails.pvid + "', '" + paid + "')";
但是当我尝试将它插入数据库时,它给出了错误
EntityFramework.SqlServer.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理
附加信息:字符串或二进制数据将被截断。
我尝试在 SQL Server 中运行查询并检查“pvid”的值,它是 10,所以在我将“PV”包含到整数 pvid 之后,它应该是 12。所以应该没问题,但为什么我得到那个错误了吗?请问谁能帮帮我?
[Key]
[MaxLength(20), MinLength(12)]
public string pvid { get; set; }
当我用硬代码 ID 替换 pvid 时,它工作得很好。为什么会这样?
P/S:我知道简单地将输入数据与查询连接起来是不可取的,但我也尝试过使用参数化查询进行查询,但它给出了同样的错误。
string sql = "INSERT INTO patient_visit (pvid,paid) " +
"VALUES(@pvid, @paid)";
List<SqlParameter> parameterList = new List<SqlParameter>();
parameterList.Add(new SqlParameter("@pvid", objDetails.pvid));
parameterList.Add(new SqlParameter("@paid", paid));
SqlParameter[] parameters = parameterList.ToArray();
dbb.Database.ExecuteSqlCommand(sql, parameters);
【问题讨论】:
-
您能告诉我们为什么您使用字符串 pvid 并在可以使用自动增量字段的地方增加 1 吗?
-
@maSTARrHiAn 我正在为我的数据库使用 SQL Server 2012。我对它不是很熟悉,可以用 SQL Server 2012 完成吗?怎么样?
标签: sql ef-code-first asp.net-mvc-viewmodel