【发布时间】:2012-05-28 14:41:57
【问题描述】:
我的应用程序是一个依赖数据库的 winform 应用程序。在应用程序启动时,它连接到服务器上的 SQL 数据库,并将此信息放入 DataSet/DataTable 中。
如果由于某种原因无法访问服务器上的数据库,则应用程序具有内置的故障转移功能,它将从本地数据库中获取信息。
如果在正常情况下,我启动将从 sql 数据库读取的工具,并且如果它已在服务器上更新(单独的 sn-p 检查),它应该确保本地数据库最多日期,这就是问题开始的地方..(见下文)
这部分工作正常并作为上下文添加 - 这是我们连接到 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;
}
}
这个 sn-p 是从我的本地数据库读取的故障转移方法的一部分...
这部分工作正常并作为上下文添加 - 这是我们连接到 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 包含来自服务器数据库的所有信息。现在我一直在谷歌搜索,发现自己试图根据这篇文章使用这段代码来更新本地数据库: 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 { }
}
这个 sn-p 运行没有错误,但它似乎没有改变任何东西。运行此步骤所需的时间也需要几毫秒,我认为这需要更长的时间。
我正在使用从我的 SQL 连接获得的数据集,我正在尝试将这个数据集写入我的本地数据库。
这可能是因为这是来自 SQL 连接的 DataSet,我无法通过 OleDbAdapter 将其写入我的 mdb 连接,还是我只是在这里遗漏了明显的东西?
感谢任何帮助。
谢谢,
凯文
【问题讨论】: