2017-04-10 83 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

相關問題