2014-11-27 3 views
1
SqlCeCommand cmd = new SqlCeCommand("INSERT INTO tbl_AStatus (Asset Status,Remarks) VALUES (@a, @b)", Login.sqlConn); 
cmd.Parameters.AddWithValue("@a", txtAssetStatus.Text); 
cmd.Parameters.AddWithValue("@b", txtRemarks.Text); 
int a = cmd.ExecuteNonQuery(); 
MessageBox.Show(a.ToString()); 

예외가 표시됩니다 : Can이 예외의 의미를 설명 할 수 있습니까? 연결 문자열, 테이블 이름은 쿼리 구문이 올바르지

쿼리를 구문 분석하는 동안 오류가 발생했습니다. [토큰 줄 번호 = 1, 오류 = 32, 토큰을 상쇄 토큰 라인 = 상태]

+0

나쁜 생각은 열 이름 공간'[자산 상태]가하는'당신이 정말로 그것을이있는 경우. – bansi

+0

[AddWithValue()를 이미 사용 중지 할 수 있습니까?] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithueue-already/) 체크 아웃해야합니다. '.AddWithValue()'사용을 중지하십시오 - 예기치 못한 놀라운 결과를 초래할 수 있습니다 ... –

답변

4

테이블 이름 또는 열 이름에 공백이 포함되어있는 경우, 당신은 [Asset Status]처럼 대괄호를 사용해야합니다. 그러나 이것은 권장되지 않습니다. 가능한 경우 열 이름을 다른 것으로 변경하는 것이 더 좋을 것입니다.

읽기 : Database, Table and Column Naming Conventions?

또한 데이터베이스 연결 및 개체를 처리하는 using statement를 사용합니다.

using(SqlCeCommand cmd = Login.sqlConn.CreateCommand()) 
{ 
    cmd.CommandText = "INSERT INTO tbl_AStatus ([Asset Status],Remarks) VALUES (@a, @b)"; 
    cmd.Parameters.Add("@a", SqlDbType.NVarChar).Value = txtAssetStatus.Text; 
    cmd.Parameters.Add("@b", SqlDbType.NVarChar).Value = txtRemarks.Text; 
    // I assume your column types are NVarChar 
    Login.sqlConn.Open(); 
    int a = cmd.ExecuteNonQuery(); 
    MessageBox.Show(a.ToString()); 
} 

AddWithValue 방법을 사용하지 마십시오. 그것은 때로는 예기치 않은 결과를 생성 할 수 있습니다. SqlParameterCollection.Add method을 사용하면 과부하가됩니다.

읽기 : Can we stop using AddWithValue() already?

+0

도움을 주신 Soner에게 감사드립니다. 이제는 ExecuteNonQuery()의 결과를 1로 표시하지만 데이터베이스에는 변경이 없습니다 – Shreyas

+1

@Shreyas 확실합니까? 'ExecuteNonQuery'가'1'을 반환하면 ** 데이터베이스에 삽입 할 ** 있습니다. 데이터베이스 관리자에서이 쿼리를 시도 했습니까? 거기에 성공적으로 삽입됩니까? –

+0

@Shreyas _Well_,이 작업에 로컬 데이터베이스 파일을 사용합니까? Visual Studio의 SQL Server 개체 탐색기 메뉴에 연결하여 로컬 파일에서이 쿼리를 시도하십시오. –