我试图寻找在数据库中的最大ID,然后通过各1个新条目增加,如下所示:SQL字符串或二进制数据将被截断
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 + "')";
但是,当我尝试插入它在数据库中,它给出了错误
类型“System.Data.SqlClient.SqlException”发生在EntityFramework.SqlServer.dll的一个例外,但在用户代码
其他信息没有处理:字符串或二进制数据a会被截断。
我试着在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,你可以使用自动增量字段? – maSTAShuFu
@maSTArHiAn我正在为我的数据库使用SQL Server 2012。我不是很熟悉它,可以用SQL Server 2012完成吗?怎么样? – Nurul