2017-04-10 7 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 + "')"; 

을하지만 난 삽입 할 때 이 데이터베이스에, 그것은 오류

에게 EntityFramework.SqlServer.dll에서 발생한 'System.Data.SqlClient.SqlException'형식의 예외를 제공하지만 사용자 코드

추가 정보 처리되지 않은 : 문자열 또는 이진 dat a는 잘립니다.

내가 SQL 서버에 쿼리를 실행 시도 'PVID'의 값을 확인했지만, 그것은 내가 정수 PVID에 'PV'를 포함 한 후 10 그래서, 그것은 그래서 괜찮을 것 (12)를해야한다입니다 ,하지만 왜 그 오류가 발생 했습니까? 누구든지 나를 도울 수 있습니까?

[Key] 
    [MaxLength(20), MinLength(12)] 
    public string pvid { get; set; } 

pvid를 하드 코드 ID로 바꿀 때 올바르게 작동합니다. 왜 이런 일이 일어나는 걸까요?

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 자의 두 개의 char 문자열을 연결하려고했습니다. 12 자 길이로 만듭니다. 2는 대상 필드보다 길다.

문제가 비슷할 수 있습니다.

+0

필드 길이를 확인하는 방법은 무엇입니까? – Nurul

+0

@Nurul : 테이블의 열의 ** 정의 **를보고 삽입이 발생하기 전에 디버그 할 때 ** 값으로 전달하는 문자열 **의 길이를 확인합니다 ..... –

+0

@ marc_s 정확히 어디에서 확인합니까? Visual Studio 또는 SQL Server의 Locals 콘솔에서? 죄송합니다. 이것에 관해서는별로 알려지지 않았습니다. ( – Nurul