2015-01-20 3 views
0

문제는 내가 이라는 테이블에 쓰려고한다는 것입니다. 그것은 몇 가지 열이 있는데, 열을 삽입/업데이트하려고하는 (null) 데이터가없는 열이 SuperSecretKey - nvarchar(100)입니다.C# 로컬 데이터베이스 업데이트 오류

을 Heres 코드 :

There was an error parsing the query.
[ Token line number = 1,Token line offset = 51,Token in error = Key ]

어떤 도움 : 여기

public void InsertSecretKey(String SuperKey, int IDKey) 
 
{ 
 
    conn = new SqlCeConnection(@"Data Source=|DataDirectory|\Database1.sdf"); 
 
    conn.Open(); 
 

 
    SqlCeCommand cmd = new SqlCeCommand(); 
 
    cmd.CommandText = "UPDATE Login SET SuperSecretKey = @SuperKey WHERE [email protected];"; 
 
    cmd.Connection = conn; 
 

 
    cmd.Parameters.AddWithValue("@SuperKey", SuperKey); 
 
    cmd.Parameters.AddWithValue("@IDKey", IDKey); 
 

 
    cmd.ExecuteNonQuery(); 
 
    conn.Close(); 
 
}

오류인가? 감사!

+2

SQL Server Compact를 사용하고 있고이 질문에 MySql 태그를 지정하지 마십시오. – Steve

답변

5

키가 reserved word입니다 전체 목록 확인을 위해 그것을 [key]

을 탈출하기 위해 reserverd 키워드를

사용하는 브라켓입니다. 오류는 매우 구체적입니다 : offset = 51 => 위치 51에 단어 key이 있습니다. 그것은 실제로 당신에게 알려줍니다 : Token in error = Key.

당신은 그것을 탈출해야합니다. [key]. new/future release1에있을 수 있습니다 SQL Server의 현재 버전의 예약 된 키워드가 아닌 무엇 :

cmd.CommandText = "UPDATE [Login] SET [SuperSecretKey] = @SuperKey WHERE [Key][email protected];"; 

모든 당신의 fieldName에, 테이블을 탈출하는 것이 좋습니다. 대부분의 ORM 등은 "동적 인"쿼리를 생성하여이 값을 기본적으로 "안전한쪽으로"이스케이프합니다.

1은 키워드가 목록 현재에없는 경우에도, 그것은 미래 릴리스에서 추가 될 수 있습니다. 당신은 아마 현재 예약 아니지만,, GUID, Version 또는 Descending을 (당신은 단지 그것을 발견) Key 같은 CustomerIdMyVerySpecificName 같은 이름이지만 일반적인 단어 안전 할거야, 단지 (future-) 안전 사용되지 않습니다.