【问题标题】:Dataset questions数据集问题
【发布时间】:2009-06-11 16:23:38
【问题描述】:

我有两个数据集问题。

  1. 如果我更改数据集中的任何单元格,如何在不使用 SQL 更新查询的情况下更新数据库中的此更改?
  2. 如何在调试模式下查看数据集内容(查看数据)?

【问题讨论】:

    标签: c# dataset


    【解决方案1】:
    1. 如果没有 UPDATE 查询,您将无法更新数据库。这就是更新发生的方式。您可以使用将其抽象出来的库,这样您就不必在代码中看到查询,但查询仍然必须发生。

    2. 您可以在调试模式下查看数据集的内容,方法是将其添加到您的监视列表并单击小放大镜图标。它会打开一个窗口,让您查看数据集中的表格。

    【讨论】:

      【解决方案2】:

      您可以使用 LINQ 将数据更新到数据库中,而无需使用 T-SQL 更新查询。

      【讨论】:

      • 就像我说的,这仍然会导致更新查询,但这可能是 Gold 的意思。 +1
      • 我相信您不必为此编写存储的 procs 和 t-sql 查询。您可以使用 ORM 实现这一目标。
      【解决方案3】:

      您要查找的是DataAdapter。它将管理更新、删除和插入更改。

      【讨论】:

        【解决方案4】:

        检查此代码并适应您的需求

            ///<summary>Update Batch records in DataTable</summary>
            ///<remarks></remarks>
            public void UpdateTables(System.Data.DataTable DataTable)
            {
        
                if (DataTable.TableName.Length == 0)
                {
                    throw new Exception("The DataTable tablename is nedded.");
                }
        
                if (this.State == ConnectionState.Closed)
                {
                    this.Connect();
                }
        
                try
                {
                    string strTablename = DataTable.TableName, strSQL;
                    System.Data.IDbDataAdapter dt = null;
        
                    if (DataTable.TableName.Length == 0)
                    {
                        throw new Exception("Tablename can't be null.");
                    }
        
                    strSQL = "SELECT * FROM " + strTablename;
        
                    if (m_DatabaseType == DatabaseTypeEnum.Access)
                    {
                        dt = new System.Data.OleDb.OleDbDataAdapter(strSQL, m_ConnectionString);
                        System.Data.OleDb.OleDbCommandBuilder cb_a
                            = new System.Data.OleDb.OleDbCommandBuilder((System.Data.OleDb.OleDbDataAdapter)dt);
        
                        dt.InsertCommand = cb_a.GetInsertCommand();
                        dt.UpdateCommand = cb_a.GetUpdateCommand();
                        dt.DeleteCommand = cb_a.GetDeleteCommand();
        
                        ((System.Data.OleDb.OleDbDataAdapter)dt).Update(DataTable);
                    }
                    else if (m_DatabaseType == DatabaseTypeEnum.SQLServer)
                    {
                        dt = new System.Data.SqlClient.SqlDataAdapter(strSQL, m_ConnectionString);
                        System.Data.SqlClient.SqlCommandBuilder cb_s
                            = new System.Data.SqlClient.SqlCommandBuilder((System.Data.SqlClient.SqlDataAdapter)dt);
        
                        dt.InsertCommand = cb_s.GetInsertCommand();
                        dt.UpdateCommand = cb_s.GetUpdateCommand();
                        dt.DeleteCommand = cb_s.GetDeleteCommand();
        
                        ((System.Data.SqlClient.SqlDataAdapter)dt).Update(DataTable);
                    }
                    else if (m_DatabaseType == DatabaseTypeEnum.Oracle)
                    {
                        dt = new System.Data.OracleClient.OracleDataAdapter(strSQL, m_ConnectionString);
                        System.Data.OracleClient.OracleCommandBuilder cb_o
                            = new System.Data.OracleClient.OracleCommandBuilder((System.Data.OracleClient.OracleDataAdapter)dt);
        
                        dt.InsertCommand = cb_o.GetInsertCommand();
                        dt.UpdateCommand = cb_o.GetUpdateCommand();
                        dt.DeleteCommand = cb_o.GetDeleteCommand();
        
                        ((System.Data.OracleClient.OracleDataAdapter)dt).Update(DataTable);
                    }
                    else if (m_DatabaseType == DatabaseTypeEnum.Odbc)
                    {
                        dt = new System.Data.Odbc.OdbcDataAdapter(strSQL, m_ConnectionString);
                        System.Data.Odbc.OdbcCommandBuilder cb_c
                            = new System.Data.Odbc.OdbcCommandBuilder((System.Data.Odbc.OdbcDataAdapter)dt);
        
                        dt.InsertCommand = cb_c.GetInsertCommand();
                        dt.UpdateCommand = cb_c.GetUpdateCommand();
                        dt.DeleteCommand = cb_c.GetDeleteCommand();
        
                        ((System.Data.Odbc.OdbcDataAdapter)dt).Update(DataTable);
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
        
                    DataTable.AcceptChanges();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        

        【讨论】:

        • 这是干什么用的?自从@Gold 首次发布问题以来,我们没有任何迹象表明他真正想要什么。
        猜你喜欢
        • 2011-04-06
        • 2019-06-18
        • 1970-01-01
        • 2019-09-30
        • 2012-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多