2010-03-08 5 views
0

SQL 서버 압축 데이터베이스 (MyDatabase.sdf)를 만들고 일부 데이터로 채 웁니다. 그때 SQLMetal.exe를 실행하고 SQL 클래스에 LINQ (MyDatabase.mdf를) 생성 이제Linq to SQL 및 SQL Server Compact 오류 : "쿼리를 구문 분석하는 동안 오류가 발생했습니다."

나는 비교적 간단한 선택으로 테이블의 모든 레코드를 선택하기 위해 노력하고있어, 나는 오류 얻을 :

"There was an error parsing the query. [ Token line number = 3,Token line offset = 67,Token in error = MAX]"

을 SQL에 Linq에 내가해야 할 몇 가지 다른 구성이, SQL을 소형으로 작동

public IEnumerable<Item> ListItems() 
{ 
    MyDatabase db_m = new MyDatabase("c:\mydatabase.sdf"); 
    return this.db_m.TestTable.Select(test => new Item() 
     { 
      ID = test.ID, 
      Name = test.Name, 
      RequestData = test.RequestData != null ? test.RequestData.ToString() : null, 
      Url = new System.Uri(test.Uri) 
     }.AsEnumerable(); 
} 

내가 읽은 다음은

내 선택 코드?

+0

코드가 잘립니다. 사용자가하려는 것을 말할 수 없습니다. 전체 코드로 편집 할 수 있습니까? –

+0

@Rob Conery - 누락 된 코드를 추가했지만 문제의 일부라고 생각하지 않습니다. 코드가 실제로 생성되는 쿼리의 일부가 아니라고 생각합니다. – Jeremy

+0

오, 기다려 봐 문제가 .... 만약 test.Request! = null을 확인하면 쿼리에 case 문이 생성됩니다. 나는 그것이 그것이 어떻게 효과가 있었는지에 관해 몰랐다! – Jeremy

답변

5

잘못된 NVARCHAR (MAX) 일 수 있습니까? 나는 SQL Compact Edition을 사용하기 전에 이와 같은 오류가 발생했다고 생각하며 SQL Compact Edition이 NVARCHAR (MAX) 데이터 유형을 지원하지 않는다는 사실을 기억합니다. 이것은 어쩌면 예외적으로 "token in error = MAX"메시지가 나타나는 이유입니다.

+0

당신은 맞습니다! test.RequestData.ToString()은 convert (nvarchar (MAX), RequestData)를 SQL에 삽입합니다. – Jeremy

+0

니스! 다행이었습니다 :) – Eric

+0

SQL CE 데이터베이스에서 nvarchar (max)를 어떻게 대체 하시겠습니까? – Alxandr

0

왜 RequestData에서 변환해야합니까? 수업은 어떻게 생겼지? 이런 식으로 설정할 수 있습니까?

RequestData = test.RequestData 
+0

내 클래스는 요청 데이터를 보관하는 문자열을 사용하고 데이터베이스는 이미지를 사용했습니다. linq 바이너리 데이터를 문자열로 변환했습니다. 내가 linq 데이터 유형에 대해 알기를 원하지 않기 때문에 linq 코드에서 변환 논리를 이동하는 방법을 알지 못합니다. 데이터베이스의 데이터 유형을 이미지 대신 ntext로 변경했습니다. – Jeremy

0

는 또한 Linq에 - 투 - SQL 에 대한 윈폼 응용 프로그램에서 SQL 서버 컴팩트 에디션에 대한 SQLMetal을 사용하는 방법을 시도했다. 몇 가지 문제가 발생하면 Linq-to-SQL 방식을 건너 뛰고 Linq-To-Entities 방식을 사용했습니다. 문법은 99 % 같은 질문에 대해 마찬가지입니다 ;-)

또한 edmx 디자이너를 사용하면 테이블을 쉽게 업데이트, 삭제 및 추가 할 수 있습니다 (드래그 드롭 또는 오른쪽 클릭으로 디자이너에서 이에 상응합니다.)

관련 문제