이것은 VS 2005를 사용하여 작성된 .NET 2.0 응용 프로그램입니다. .NET 2.0을 실행하는 시스템에서는 잘 작동하지만 .NET 4.0을 실행하는 시스템에서는 하드 충돌이 발생합니다.OleDBConnection 개체없이 OleDbDataAdapter 개체를 사용할 때 .NET 4.0 응용 프로그램이 .NET 4.0에서 충돌하는 이유는 무엇입니까?
string selectCommand1 = ....
string connectionString1 = ....
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connectionString1))
{
try
{
adapter.Fill(table1);
}
catch
{
MessageBox.Show("error");
}
}
string selectCommand2 = ....
string connectionString2 = ....
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand2, connectionString2))
{
try
{
adapter.Fill(table2);
}
catch
{
MessageBox.Show("error");
}
}
다시 말하지만, 그것은 .NET 2.0에서 작동, .NET 4.0
ConnectionStrings 1 & 2 참조 다른 .XLS 파일에서 충돌 다음은 코드의 중요한 부분이다.
이 문제를 해결하는 방법은 OleDbConnection 유형의 필드 변수를 선언하고 초기화 한 다음 ConnectionString 속성을 설정하고 OleDbDataAdapter using 문을 열기 전에 Open()하는 것입니다. 그래서 같이
OleDbConnection connection = new OleDbConnection();
.......
connection.ConnectionString = connectionString1;
connection.Open();
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connection))
{
try
{
adapter.Fill(table1);
}
catch
{
MessageBox.Show("error");
}
}
connection.Close();
connection.ConnectionString = connectionString2;
connection.Open();
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand2, connection))
{
try
{
adapter.Fill(table2);
}
catch
{
MessageBox.Show("error");
}
}
는하지만, 이상 한 번에 코드 한 줄을 제거하고 이상 재 컴파일 한 후이 내 응용 프로그램은 하드 .NET 4.0에서 (오류 메시지)를 충돌하지 않은 이유라고 생각하기 어렵다 나는 그 사실을 문제의 원인으로 생각했다.
문제가 해결되어 기쁩니다. 첫 번째 코드가 .NET 4.0에서 작동하지 않는다는 사실에 만족하지 않습니다.
누군가 .NET 4.0이 위와 같은 코드로 작동하지 않는 이유를 설명해주십시오.
MSDN에 따르면 사용중인 OleDbDataAdapter 생성자가 암시 적으로 생성 된 연결을 열지 않습니다. http://msdn.microsoft.com/en-us/library/2f8y4737%28v=vs.100%29 그러나이 문서의 2.0 버전을 보면 동일한 경고가 나타납니다. –
그게 재미 있어요. 여전히 그것이 .net 2.0에서 작동하는 이유에 대한 대답을하지 않았지만 .net 4.0 –
Windows 이벤트 로그를 점검하여 충돌에 대한 단서가 있는지 (명시 적 오류 메시지가 없다고 말했기 때문에) (catch) (Exception 예) {MessageBox.Show (ex.Message);}'? –