“ Adapter.Update(DataTable);”方法更新表数据源的所有行还是仅更新那些已修改的行?

时间:2019-03-04 07:36:56

标签: c# ado.net

Adapter.Update (DataTable);方法更新表数据源的所有行还是仅更新那些已修改的行?

逻辑:
-连接数据库;
-我们对表格行进行采样;
-用户进行更改;
-保存。方法Save()

我使用代码来处理数据库:

public DataTable CreateCmds()
        {
            table_2 = new DataTable();
            try
            {
                string connectionString = @"Data Source=.\SQLEXPRESS1;Initial Catalog=Prb;Integrated Security=True";              

                string queryString = "SELECT * FROM tbl_01_Groups";
                // string connectString = "Data Source=.\\SQLEXPRESS;Initial Catalog=LSTU_Schedule_autumn20172018;" + "Integrated Security=true;";

                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    adapter = new SqlDataAdapter();
                    adapter.SelectCommand = new SqlCommand(queryString, connection);
                    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

                    connection.Open();

                    adapter.Fill(table_2);
                }

            }
            catch (Exception ex)
            {

                string s = ex.Message;
                string t = ex.StackTrace;
                // throw;
            }

            return table_2;
        }

        public void Save()
        {
            string connectionString = @"Data Source=.\SQLEXPRESS1;Initial Catalog=Prb;Integrated Security=True";

            string queryString = "SELECT * FROM tbl_01_Groups";

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                adapter = new SqlDataAdapter();
                adapter.SelectCommand = new SqlCommand(queryString, connection);
                SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

                connection.Open();

                adapter.Update(table_2);
            }
        }

更新_1
我没有在网络上找到答案,也没有找到解决该问题的方法。
问题是由于代码效率提高所致。
我以为执行表达式adapter.Update(DataTable)时,代码会遍历数据源表的所有行。
如果是这种情况,那么可能存在更有效的方式来对代码进行采样以仅更新已更改的行。

1 个答案:

答案 0 :(得分:1)

DataTable.Rows [index] .RowState引用数据行的状态。

ADO.NET将检查状态,仅在状态更改时更新。

请参阅https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqldataadapter?view=netframework-4.7.2#remarks

  

该更新是逐行执行的。对于每个插入,修改和删除的行,Update方法都会确定对其执行的更改的类型