2017-04-10 58 views
0

我试图寻找在数据库中的最大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); 
+1

你能告诉我们为什么你使用一个字符串pvid,并增加1,你可以使用自动增量字段? – maSTAShuFu

+0

@maSTArHiAn我正在为我的数据库使用SQL Server 2012。我不是很熟悉它,可以用SQL Server 2012完成吗?怎么样? – Nurul

回答

0

检查试图放入数据的列的字段长度。

我有这个问题之前,列是varchar(10),我想连接两个字符串,每个6个字符。使他们12个字符长。 2比目标字段长。

您的问题可能类似。

+0

如何检查字段长度? – Nurul

+0

@Nurul:你看表中列的**定义**,在插入发生之前,当你通过调试时,你检查**作为值传入的**长度..... –

+0

@marc_s我到底在哪里检查?在Visual Studio中的本地控制台或SQL服务器中?对不起,我对此很无知:( – Nurul

相关问题