【问题标题】:SqlCommandBuilder cannot handle SQLDataAdapter with Multiple SQL-StatementSqlCommandBuilder 无法使用多个 SQL 语句处理 SQLDataAdapter
【发布时间】:2013-06-09 12:42:57
【问题描述】:

我正在为 MS SQL Server 数据库开发一个简单的用户客户端(前端)。

数据库本身非常简单,有八个没有任何外键的表。

到目前为止,我设法连接到数据库并将所有表和数据加载到数据集中。 我通过使用带有多个 SQL 语句(每个表一个)的单个字符串来做到这一点:

 _dbconstrb = new SqlConnectionStringBuilder();
 _dbconstrb.DataSource = ".\local";
 _dbconstrb.InitialCatalog = "mydatabase";


string sql_str = "SELECT * FROM tbl1; SELECT * FROM tbl2; ..."
_dbda = new SqlDataAdapter(sql_str, _sqlcon);
_dbds = new DataSet();
_dbda.Fill(_dbds);

数据集绑定到bindingsource,并将其设置为DataGridView 的数据源。我正在使用一个简单的ComboBox,用户可以在其中选择八个数据库表之一。每次用户对组合框进行任何更改时,绑定源的数据成员都会设置为组合框中的选定表。到目前为止它工作完美。 现在用户将对 gridview 数据进行任何更改(添加、删除或更改记录)。 我想使用 SQLCommandBulider 更新数据库,我尝试了这个:

SqlCommandBuilder cmb = new SqlCommandBuilder(_dbda);
int updated = _dbda.Update(_dbds);

但这仅适用于第一个表的数据(在 sql-string 中首先出现的表,在本例中为 tbl1)。 DataAdapter 似乎无法识别所有跟随的表。我真的必须使用八个 DataAdapter(每个表一个)来实现这一点吗?

解决方案: 最后我通过添加八个DataApter 来解决这个问题。然而,Entity Framework 对于这种数据处理来说看起来很有希望。再次感谢这一点。

【问题讨论】:

    标签: c# sql sql-server ado.net dataset


    【解决方案1】:

    虽然您的应用程序可能很简单,但不确定从所有表中加载数据在性能方面是否是个好主意。我认为使用实体框架会帮助你http://www.asp.net/web-forms/overview/working-with-data-(entity-framework-tutorial) 对于您要尝试做的事情来说,这真的很简单。

    【讨论】:

    • 它不是 asp.net :) 只是教程恰好在 asp.net 下 :)
    • 哦,对不起。看起来真的很有趣……谢谢你的信息。
    猜你喜欢
    • 2010-10-30
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多