작업은 Excel 시트를 업데이트할 때 업데이트 가능한 쿼리를 사용해야 합니다.
Excel 시트를 업데이트할 때 다음 오류가 발생합니다.
Server Error in '/ReadExcelData_Csharp' Application.
Operation must use an updateable query.
그리고 제가 사용하고 있는 코드는 다음과 같습니다.
querys = "UPDATE [Sheet1$] "+"SET [Number]=" +s.Trim()+ " WHERE [Number]=" + s2.Trim() ;
objcmc = new OleDbCommand(querys, conn);
objcmc.ExecuteNonQuery();
어떤 도움이든 감사하겠습니다.
그리고 내가 사용한 연결은 다음과 같습니다.
if (strFileType.Trim() == ".xls")
{
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strNewPath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
}
else if (strFileType.Trim() == ".xlsx")
{
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strNewPath + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}
연결 문자열에서 IMEX=2(또는 IMEX=1)를 제거하면 작동합니다.이 미친 솔루션을 여러 번 테스트했는데 이상한 이유로 IMEX를 제거하는 것이 효과가 있는 것 같습니다(적어도 xlsx 파일의 경우).
다음 코드가 작동합니다.
static void Main(string[] args)
{
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + "d:\\temp\\customers.xlsx" + ";Extended Properties=\"Excel 12.0;ReadOnly=False;HDR=Yes;\"";
string selectString = "INSERT INTO [Customers$](Id,Company) VALUES('12345', 'Acme Inc')";
OleDbConnection con = new OleDbConnection(connectionString);
OleDbCommand cmd = new OleDbCommand(selectString, con);
try
{
con.Open();
cmd.ExecuteNonQuery();
Console.WriteLine("Success");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
con.Dispose();
}
Console.ReadLine();
}
}
social.msdn.microsoft.com 의 RobertNet 덕분입니다.
위에 제공된 솔루션을 사용하여 연결 문자열에서 IMEX=2 또는 IMEX=1 문자열을 제거했습니다.하지만 이것으로는 충분하지 않았습니다.저의 경우, 솔루션에 대한 추가적인 해결책이 필요했습니다.
하지만 제 데이터베이스에는 IMEX가 필요했습니다. 왜냐하면 제 열에는 혼합 데이터 유형이 있고 일부는 문자열 값을 이중으로 값기 때문입니다.IMEX = 1을 제거하면 열에서 가장 인기 있는 값을 기준으로 열 데이터 유형을 자동으로 선택한 다음 선택한 유형이 아닌 값을 캐스트하지 못하기 때문에 런타임 예외 "유형의 개체를 캐스트할 수 없습니다"가 표시됩니다.
나는 나의 이중값과 int값을 문자열 값으로 변경하고(excel에서 셀 값의 시작 부분에 수동으로 '를 추가함), 연결 문자열에서 IMEX를 제거함으로써 이 문제를 해결했습니다.
저 같은 경우에는 제가 변했어요.ConnectionString
그리고 이것이 문제를 해결했습니다.
제거했습니다.ReadOnly=False;HDR=Yes;
의 매개 변수.connectionString
string _connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;\";", pathToExcelFile);
제 문제는 이전 연결에서 엑셀 파일이 읽기 전용 모드로 잠겨 있었다는 것입니다.연결을 끊어야 합니다.
언급URL : https://stackoverflow.com/questions/7622492/operation-must-use-an-updateable-query-when-updating-excel-sheet
'programing' 카테고리의 다른 글
Python에서 URL을 구성할 때 경로의 구성 요소를 결합하는 방법 (0) | 2023.06.25 |
---|---|
프록시 뒤에서 루비 보석을 업데이트하는 방법(ISA-NTLM) (0) | 2023.06.25 |
빌딩 cx_Oracle 문제 - libclntsh.so .11.1 => 찾을 수 없음 (0) | 2023.06.20 |
Oracle - ORA-01489: 문자열 연결 결과가 너무 깁니다. (0) | 2023.06.20 |
중첩된 Git 저장소? (0) | 2023.06.20 |