私のアプリケーションは、データベースに依存する winform アプリです。アプリケーションの起動時に、サーバー上の SQL データベースに接続し、この情報を DataSet/DataTable に入れます。
何らかの理由でサーバー上のデータベースにアクセスできない場合、アプリケーションには組み込みのフェイルオーバーがあり、ローカル データベースから情報を取得します。
通常のシナリオでツールを起動すると、SQL データベースから読み取られ、サーバー上で更新されている場合 (別のスニペットがこれをチェックします)、ローカル データベースが最新であることを確認する必要があります。問題が始まります..(以下を参照)
この部分は正常に機能し、コンテキストとして追加されます。これは、SQL データベースに接続する場所です。
public static DataSet dtsTableContents;
public static DataTable CreateDatabaseSQLConnection()
{
try
{
string strSqlConnectionString = "Data Source=MyLocation;Initial Catalog=MyCatalog;User=MyUser;Password=MyPassword;";
SqlCommand scoCommand = new SqlCommand();
scoCommand.Connection = new SqlConnection(strSqlConnectionString);
scoCommand.Connection.Open();
string strQueryToTable = "SELECT * FROM " + strTableName;
dtsTableContents = new DataSet();
SqlCommand scmTableInformation = new SqlCommand(strQueryToTable, scnConnectionToDatabase);
SqlDataAdapter sdaTableInformation = new SqlDataAdapter(scmTableInformation);
scnConnectionToDatabase.Open();
sdaTableInformation.Fill(dtsTableContents, strTableName);
DataTable dttTableInformation = dtsTableContents.Tables[strTableName];
scnConnectionToDatabase.Close();
return dttTableInformation;
}
catch
{
return null;
}
}
このスニペットは、ローカル データベースから読み取るフェールオーバー メソッドの一部です...
この部分は正常に機能し、コンテキストとして追加されます - ここで MDB データベースに接続します
public static DataTable CreateDatabaseConnection()
{
try
{
string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyLocation;Persist Security Info=True;JET OLEDB:Database Password=MyPassword;"
odcConnection = new OleDbConnection(ConnectionString);
odcConnection.Open();
string strQueryToTable = "SELECT * FROM " + strTableName;
DataSet dtsTableContents = new DataSet();
OleDbCommand ocmTableInformation = new OleDbCommand(strQueryToTable, ocnConnectionToDatabase);
OleDbDataAdapter odaTableInformation = new OleDbDataAdapter(ocmTableInformation);
ocnConnectionToDatabase.Open();
odaTableInformation.Fill(dtsTableContents, strTableName);
DataTable dttTableInformation = dtsTableContents.Tables[strTableName];
ocnConnectionToDatabase.Close();
return dttTableInformation;
}
catch
{
return null;
}
}
私の CreateDatabaseSQLConnection() から、DataSet があります。この DataSet には、サーバー データベースからのすべての情報が含まれていることが確認されています。今、私はグーグルで調べていて、このコードを使用して、この記事に基づいてローカルデータベースを更新しようとしていることに気付きました: http://msdn.microsoft.com/en-us/library/system.data.common.dataadapter.update( v=vs.71).aspx
public static void UpdateLocalDatabase(string strTableName)
{
try
{
if (CreateDatabaseConnection() != null)
{
string strQueryToTable = "SELECT * FROM " + strTableName;
OleDbDataAdapter odaTableInformation = new OleDbDataAdapter();
odaTableInformation.SelectCommand = new OleDbCommand(strQueryToTable, odcConnection);
OleDbCommandBuilder ocbCommand = new OleDbCommandBuilder(odaTableInformation);
odcConnection.Open();
odaTableInformation.Update(dtsTableContents, strTableName);
odcConnection.Close();
}
}
catch { }
}
このスニペットはエラーなしで実行されますが、何も変更されていないようです。また、このステップを実行するのにかかる時間はミリ秒のようにかかり、これにはもっと時間がかかると思います.
SQL 接続から取得した DataSet を使用しています。この DataSet をローカル データベースに書き込もうとしています。
これは SQL 接続からの DataSet であり、これを OleDbAdapter を介して mdb 接続に書き込むことができないという事実でしょうか、それともここで明らかなことを見逃しているのでしょうか?
どんな助けでも大歓迎です。
ありがとう、
ケビン