2014-12-23 2 views
-4

MS Access에 삽입하려고하는데 SQL 구문에서 오류가 발생합니다."SQL 구문"오류로 인해 MS Access에 삽입 할 수 없습니다.

나는 "암호"라는 단어가 키워드라고 생각합니다. 데이터베이스 필드 이름을 변경하지 않고이 문제를 해결할 수있는 방법이 있습니까?

OleDbCommand cmd = new OleDbCommand("INSERT INTO profiles(
    user_name, full_name, password, profile_id) 
    VALUES (@user_name, @full_name, @password, @profile_id);"); 

cmd.Parameters.AddWithValue("@full_name", this.FullName); 
cmd.Parameters.AddWithValue("@user_name", this.UserName); 
cmd.Parameters.AddWithValue("@password", this.Password); 
cmd.Parameters.AddWithValue("@profile_id", this.ProfileID); 

편집 :

지금 해결 한 위의 코드에 오타가 있었다. 원본 코드에는 나타나지 않지만 여기에서 편집 한 후에 나타납니다. 많은 사람들이 지적한 바와 같이, 수정 사항은 대괄호입니다.

+4

단지 오타입니다. 한 장소에는'@ passwords'가 있고 다른 장소에는'@passwords '가 있습니다. 또한 _exact_ 오류 메시지를 게시하면 도움이 될 것입니다. –

+1

"password"는 예약어로 보이지 않습니다. 참고 문헌 : [Access 2007] (https://support.office.com/en-in/article/Access-2007-reserved-words-and-symbols-e33eb3a9-8baa-4335-9f57-da237c63eabe) 이후 버전에서 변경됨), [SQL Server] (http://msdn.microsoft.com/en-us/library/ms189822.aspx) –

+0

'YouAreSalty'는 매개 변수를 추가하는 경우 Insert Statement를 확인했습니다. (들) 일치해야합니다 이것은 아무 생각없는 것입니다 – MethodMan

답변

1

당신은 따옴표 또는 대괄호로 데이터베이스 필드를 넣을 수 있습니다 :

[password] "password"

예컨대 :

"INSERT INTO profiles(user_name, full_name, [password], profile_id) 
+0

그게 문제가 아니에요. –

+1

@KenWhite, OP가 보여준 코드와 'SQL 구문'오류라는 오류를 감안할 때 이것이 유일한 곳입니다. 다른 문제는 정확하게 문제를 재현하기 위해 더 많은 코드가 필요합니다. – ps2goat

+1

@ ps2goat 그랜트는 그의 코멘트에서 실제 문제를 지적했다 – Jonesopolis

3

대괄호 필드 이름을 묶습니다.

사이 @passwords사이의 불일치

은 액세스와은 OleDb를 사용할 때 매개 변수 이름은 무시되기 때문에는 무관하다 @Password. 그들은 INSERT 문에 나타나는대로 해야@full_name 전에 너무 --- 같은 순서로 @user_name을 매개 변수 값을 제공하지만 : 코멘트에 의해 판단

OleDbCommand cmd = new OleDbCommand("INSERT INTO profiles(user_name, full_name, [password], profile_id) VALUES (@user_name, @full_name, @passwords, @profile_id);"); 

    cmd.Parameters.AddWithValue("@user_name", this.UserName); 
    cmd.Parameters.AddWithValue("@full_name", this.FullName); 
    cmd.Parameters.AddWithValue("@password", this.Password); 
    cmd.Parameters.AddWithValue("@profile_id", this.ProfileID); 

, 우리가 나타납니다 동의하지 여부에 관해서는 암호은 MS Access의 예약어입니다. Microsoft에 따르면, 예약어입니다. List of reserved words in Jet 4.0

+0

주문은 실제로 중요합니까? ADO.NET은 매개 변수를 재정렬 할만큼 똑똑 할 것이라고 생각합니다. – ps2goat

+1

예, OleDb (MS Access 사용)는 * names * 매개 변수를 무시하기 때문에 SQL 문에서 매개 변수 값과 매개 변수 "place-holder"를 일치시키기 위해 위치 만 사용할 수 있습니다. – HansUp

관련 문제