我正在尝试创建一个Windows窗体应用程序,它可以处理存储在SQL服务器上的多个表中的数据。
在应用程序运行时,本地存储数据的最佳方法是什么?我有一个以前的程序只修改了一个表,并设置为使用datagridview。但是,由于我不一定要查看所有表,我正在寻找另一种方法来存储SELECT * FROM ...
查询检索到的数据。
最好是加载表,在C#应用程序中进行更改,然后在最后更新修改后的表,或者只是远程执行数据库上的所有操作(每次需要时检索表) )?
答案 0 :(得分:1)
您可以使用ConnectionString一次接收一个表并将其分配给DataTable。然后,您可以以任何所需的形式更改DataTable。完成更改后,可以使用DataAdapter将更改提交回数据库。
以下是获取表格的方法:
DataTable table;
using (SqlDbConnection connection = new SqlDbConnection(connectionString))
{
connection.Open();
using (SqlDbCommand command = new SqlDbCommand(tableName, connection))
{
command.CommandType = CommandType.TableDirect;
SqlDbDataReader dr = command.ExecuteReader(CommandBehavior.CloseConnection);
table = new DataTable(tableName);
routeID.Load(dr);
}
}
以下是更改后提交表的方法,请确保将DataTable分配给DataSet以获取提交的更改:
DataSet dataSet = new DataSet();
dataSet.add(table);
using (var adapter = new SqlDbDataAdapter("SELECT * FROM " + tableName, connection))
{
using (var builder = new SqlDbCommandBuilder(adapter))
{
adapter.Fill(dataSet, tableName);
using (DataSet newSet = dataSet.GetChanges(DataRowState.Added))
{
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";
adapter.InsertCommand = builder.GetInsertCommand();
adapter.Update(newSet, tableName);
}
}
}
可能有一些错过类型,我没有编译来检查错误。祝你好运。
答案 1 :(得分:0)
DataSet对象具有一些方法,使您能够处理内存中多个表的数据,然后将这些更改保存回数据库。这是一个好主意取决于您的要求和数据 - 是否有多个并发用户,您如何处理冲突的更新等等。我通常更喜欢立即将更改写回数据库,但是,我通常在网络应用环境。