2013-08-22 2 views
0

Excel 시트의 단일 셀을 업데이트하려고합니다. 아래 예제 코드에서는 컬럼과 행에 변수를 사용하고 있는데, 이는 프로그램의 다른 부분에 따라 달라지기 때문에 디버깅 목적으로 각각 A와 1로 설정했기 때문입니다.OleDb를 사용하여 Excel 시트 업데이트

는 지금은 구문 오류 (누락 된 연산자) 쿼리 식 06 "라는 오류 얻고있다 :. '31 일 오후

단순히 내가이 내 문제가 해결되지 않습니다 알고 있기 때문에 나는 매개 변수화 제안하지 마십시오 나는 주입에 대해 걱정하고 있지 않다

감사를 사전 모두에

 string newColumn = "A"; 
     string newRow = "1"; 
     string worksheet2 = strMonth; 

     var cnnStr2 = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO\"", textBox1.Text); 
     var cnn2 = new OleDbConnection(cnnStr2); 

     cnn2.Open(); 

     string sql2 = String.Format("UPDATE [{0}$] SET {1}{2}={3}", worksheet2, newColumn, newRow, dtpTime.Text.Substring(0, 8)); 
     OleDbCommand objCmdSelect = new OleDbCommand(sql2, cnn2); 
     objCmdSelect.ExecuteNonQuery(); 

     cnn2.Close(); 

편집 :..

: 게르하르트 제안 링크를 바탕으로, 나는 다음에 내 명령 텍스트를 변경
string sql2 = String.Format("UPDATE [{0}${1}{2}:{1}{2}] SET F1='{3}'", worksheet2, newColumn, newRow, dtpTime.Text.Substring(0, 8)); 

이제 "작업에서 업데이트 할 수있는 쿼리를 사용해야합니다."라는 오류가 발생합니다. 이제 어떻게 해야할지 잘 모릅니다. {1} {2}은 (는) 시트 {0} $의 단일 셀 범위를 제공하고, 연결 문자열에 HDR로 지정한 열 이름이없는 경우 F1 = 기본 열 이름입니다. 아니. 마지막으로 {3}은 셀을 업데이트하는 부분 문자열이며 모든 사람이하는 것처럼 단순한 인용 부호로 묶여 있습니다. 작은 따옴표를 제거하면 다른 오류가 발생합니다.

+0

예. 그런 다음 오류가 "하나 이상의 필수 매개 변수에 지정된 값이 없습니다."로 변경됩니다. –

+2

아마도 도움이 될 것입니다. http://forums.asp.net/t/1214491.aspx/1 –

+0

또는 여기 (자습서) : http://yoursandmyideas.wordpress.com/2011/02/05/how-to- 읽기/쓰기 엑셀 파일 사용 에이스 데이터 제공자/ –

답변

1

내 편집 된 명령 문자열이 정확합니다. 그러나 새로운 오류를 없애기 위해서는 연결 문자열에서 "IMEX = 1"을 제거해야했습니다. 왜 이것이 이것이 작동하는지 100 % 확신 할 수는 없지만 그렇습니다.

oledb 명령을 사용하는 것에 대해 살펴 보면서 한 가지 사실은 명령과 같은 모든 부분이 명령의 각 부분이 실제로하고있는 것과 혼동을 일으키는 것입니다. 나는 아직도 당신이 "WHERE"와 같이 그것에 추가 할 수있는 특별한 것들을 완전히 이해하지 못하고 있지만,이 질문을 발견하고 비슷한 문제를 겪고있는 누군가를 돕기 위해 여기에 약간을 추가하고 싶습니다. 단일 셀을 선택하기를 원한다면 SELECT 문에서

는이 같은 것을 사용할 수 있습니다

string commandString = String.Format("SELECT * FROM [{0}${1}{2}:{1}{2}]", worksheetName, column, row); 

은 "SELECT * FROM" "워크 시트 명"모든 것을 선택합니다. 그런 다음 "$"로 워크 시트의 이름을 따라야합니다. 다음으로, "{1} {2} : {1} {2}"은 (는) 사용자가 선택한 셀의 범위입니다. 여기에서 콜론의 양쪽에있는 열과 행을 동일하게 만들면 단일 셀 범위를 선택하게됩니다. 예를 들어, "E3 : E3"은 셀 E3에있는 것만 선택합니다. UPDATE 문에서

, 단일 셀을 업데이트하기를 원한다면, 당신은 같은 것을 사용할 수 있습니다

string commandString = String.Format("UPDATE [{0}${1}{2}:{1}{2}] SET F1='{3}'",worksheetName, column, row, data); 

여기에서 주목해야 할 유일한 차이를 "SET F1 = '{3}' '. 그러면 범위에서 지정한 셀이 데이터 변수에있는 셀로 설정됩니다. "F1"의 사용에 유의하십시오. 이것은 단순히 연결 문자열에 "HDR = NO"가 지정되어있을 때 사용되는 기본값입니다. 즉, 열 머리글이나 이름이 없습니다. 열 머리글이 있으면 F1 대신 사용하십시오. F1이 어떤 식 으로든 F1에 해당하지 않는다는 것을 이해하는 것이 중요합니다.

0

임은이 문제로 주말을 보냈습니다. 마침내 해결할 수있었습니다. 연결 문자열을 다음으로 변경했습니다.

Microsoft.Jet.OLEDB.4.0; 데이터 원본 = '파일 경로'; 확장 속성 = 'Excel 8.0 '

WITH OUT IMEX 또는 HDR 옵션. 이전에는 excel 파일에서 cellprotection 검사를 확인하고 변경했습니다. 나는 이것이 다른 사람들을 돕기를 바랍니다.

관련 문제