SqlDataAdapter.Update(dataset) 方法插入新行但不更新现有行

     2023-05-08     277

关键词:

【中文标题】SqlDataAdapter.Update(dataset) 方法插入新行但不更新现有行【英文标题】:SqlDataAdapter.Update(dataset) method inserts new rows but does not updates existing rows 【发布时间】:2014-06-01 14:56:49 【问题描述】:

我正在创建具有 DataGrigView 来呈现表格的 winform 应用程序。 我有一个负责使用 DB 的 DAL 类。

加载表格数据的方法有一种:

 public static void GetItemsByOrder(int orderId, ref DataSet dataSet)
    
        string queryString = @"Select Id,OrderId as [מס' הזמנה],ItemCode as[מק""ט], ItemName as [שם פריט], ReceiptDate as [ת. הספקה],
                WarrantyExpDate as [באחריות עד],SuppliersItemCode as [מק""ט ספק], Supplier as [ספק], Count as[כמות], Active 
                FROM OrdersManager_Items where OrderId = @param";

        SqlConnection connection = new SqlConnection(connectionString);
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Parameters.AddWithValue("@param", orderId);

        SqlDataAdapter adapter = new SqlDataAdapter(command);


        try
        
            lock (myLock)
            
                adapter.Fill(dataSet,"Items");
            
        
        catch (Exception ex)
        
            LogWriter.WriteLogEntry(LogWriter.LogType.ERROR, string.Format("Failed to get Items by OrderId code from DB."+
                "This is due to exception: 0,\n StackTrace: 1. ", ex.Message, ex.StackTrace));

            dataSet = null;
        
    

第二种方法负责使用表中所做的更改来更新数据库:

public static bool UpdateItemsByOrder(int orderId, DataSet data)
    

        string queryString = @"Select Id,OrderId as [מס' הזמנה],ItemCode as[מק""ט], ItemName as [שם פריט], ReceiptDate as [ת. הספקה],
                WarrantyExpDate as [באחריות עד],SuppliersItemCode as [מק""ט ספק], Supplier as [ספק], Count as[כמות], Active 
                FROM OrdersManager_Items where OrderId = @param";


        SqlConnection connection = new SqlConnection(connectionString);
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Parameters.AddWithValue("@param", orderId);

        SqlDataAdapter adapter = new SqlDataAdapter(command);


        try
        
            lock (myLock)
            

                SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
                int rowsUpdated = adapter.Update(data,"Items");

                return true;
            
        
        catch (Exception ex)
        
            LogWriter.WriteLogEntry(LogWriter.LogType.ERROR, string.Format("Failed to update Items table in DB. This is due to exception: 0,\n StackTrace: 1. ", ex.Message, ex.StackTrace));

            return false;
        
    

问题: 如果在 Items 表中添加或删除了新行 - UpdateItemsByOrder 按预期添加/删除数据库中的行。 但 Items 表的现有行中的更新不会在 DB 中更新。

没有错误或异常。 我尝试添加 builder.GetUpdateCommand() command = no result.

我很乐意得到任何帮助或建议。谢谢

P>S> 我正在使用这个MSDN LINK 来学习如何使用 SQLAdapter

【问题讨论】:

您是否尝试过将 Update 查询与 command.ExecuteNonQuery() 一起使用? 你想使用更新命令是什么意思?当我现在没有更新值时如何编写查询??? 您是否使用AutoGenerateEditButtonGridView 进行更新? 将断点放在adapter.Update(),检查DataTableRowState,必须设置为Modified才能更新行。 Sallushan,你是对的,rowState 是“Unchanged”。是什么原因?是因为我加载的DataSet和我尝试更新的DataSet不是同一个对象? 【参考方案1】:

好的,在 sallushan 的建议下,我得到了解决方案: DataAdapter 不更新 DB 的原因是 DataTable 中更新的行的 RowState 值为“Unchanged”而不是“Modified”。

有两种基本方法可以解决这个问题:

    直接在 DataTable 中而不是在 DGV 中更新数据 在通过 DGV 进行更新后调用 DataTable.Rows[indexOfUpdatedRowInDGV].EndEdit() 方法,如 Here 所述。

感谢大家的帮助:-)

【讨论】:

【参考方案2】:

您确实意识到您运行的是 SELECT 命令而不是更新,对吗? 我的猜测是 adapter.Update 只是选择然后报告没有更新的行,因为没有更新。

【讨论】:

如果你是对的,为什么新行添加成功? 我正在使用此链接中的示例msdn.microsoft.com/en-us/library/… 我确信如果您运行“SELECT ....”,您将无法更新 SQL 表中的任何行,为此您需要一个 UPDATE table-name SET colName=value WHERE conditional 命令。 您可以执行“SELECT INTO”,将行添加到表中。

C# SqlDataAdapter.Update()

】C#SqlDataAdapter.Update()【英文标题】:【发布时间】:2010-07-1208:39:42【问题描述】:我要疯了。我做了ff:创建数据表。通过SqlDataAdapter从SQL数据库填充它。通过datagridview编辑数据表。调用sqldataadapter.update但更改不会持久化到数据... 查看详情

SqlDataAdapter.Update 未更新

】SqlDataAdapter.Update未更新【英文标题】:SqlDataAdapter.Updatenotupdating【发布时间】:2015-10-2119:34:29【问题描述】:(我应该说我对vb.net相当陌生)我在覆盖我的数据库中的条目时遇到问题。我认为问题在于SqlDataAdapter.Update没有用我... 查看详情

在 SqlDataAdapter.Update() 中获取错误消息

】在SqlDataAdapter.Update()中获取错误消息【英文标题】:GettingerrormessageinSqlDataAdapter.Update()【发布时间】:2016-07-1419:43:38【问题描述】:我有一个数据库表(在本例中为空)createtablewords(idintnotnull,wordnvarchar(50)notnull)还有一个DataGridVie... 查看详情

200万条记录的SqlDataAdapter.Update()速度极慢

】200万条记录的SqlDataAdapter.Update()速度极慢【英文标题】:SqlDataAdapter.Update()of2millionrecordsisextremelyslow【发布时间】:2019-04-3009:22:51【问题描述】:我有一个客户希望每天将他的子客户价格工具(超过2.000.000条记录)导入SQLServer数... 查看详情

使用 SqlDataAdapter.Update 方法时复制表行

】使用SqlDataAdapter.Update方法时复制表行【英文标题】:DuplicatingtablerowswhenusingSqlDataAdapter.UpdateMethod【发布时间】:2013-11-0403:08:40【问题描述】:在我的项目中,我有表格“产品”。IDNamePrice------------------1xyz1002abc2003pqr300在我的c#代... 查看详情

当 RowState = Modified 时 SQLDataAdapter.Update() 不更新

】当RowState=Modified时SQLDataAdapter.Update()不更新【英文标题】:SQLDataAdapter.Update()notUpdatingwhenRowState=Modified【发布时间】:2018-05-1516:41:39【问题描述】:我正在尝试设置一个程序,当用户更新项目描述时,将在保存表单时更新数据库... 查看详情

SqlDataAdapter.Update(dataset) 方法插入新行但不更新现有行

】SqlDataAdapter.Update(dataset)方法插入新行但不更新现有行【英文标题】:SqlDataAdapter.Update(dataset)methodinsertsnewrowsbutdoesnotupdatesexistingrows【发布时间】:2014-06-0114:56:49【问题描述】:我正在创建具有DataGrigView来呈现表格的winform应用程... 查看详情

SqlDataAdapter.Update(数据表)不工作(不更新数据库)

】SqlDataAdapter.Update(数据表)不工作(不更新数据库)【英文标题】:SqlDataAdapter.Update(datatable)isnotworking(notupdatingthedatabase)【发布时间】:2016-04-0516:34:30【问题描述】:我有下面的代码,我试图从Windows应用程序中所做的c#网格视... 查看详情

SqlDataAdapter.Update 直到第二次更新才写入表

】SqlDataAdapter.Update直到第二次更新才写入表【英文标题】:SqlDataAdapter.Updatenotwritingtotableuntilsecondupdate【发布时间】:2014-08-0201:15:03【问题描述】:我有一个用C#2010Express开发的程序,它的表单由一个DataGridView组成,下面有一个单... 查看详情

如果我将列值“更改”为已经存在的值,会调用 UPDATE 吗?

...需要额外的逻辑来避免对我的SQL数据库的无用调用,或者SqlDataAdapter.Update()是否会做正确的事情。如果我有这个代码:SqlCon 查看详情

Mono C# SQL 更新“并发冲突”

...:2009-07-1015:24:22【问题描述】:每次我尝试通过Mono中的SqlDataAdapter.Update()更新一行时,我都会得到:未处理的异常:System.Data.DBConcurrencyException:并发冲突:UpdateCommand影响了0条记录。 查看详情

datatable数据批量写入数据库三种方法比较

DataTable数据批量写入数据库三种方法比较标签:it 分类:C#1)  insert循环插入;2)  sqldataadapter.update(dataset,tablename);3)  sqlbulkcopy.WriteToServer(datatable);1、生成测试的datatable表,表结构如下:UniqueID(主 查看详情

python中的DAT文件

】python中的DAT文件【英文标题】:DATfileinpython【发布时间】:2021-04-0804:53:05【问题描述】:我对Python中的.dat文件有疑问:我无法对其进行编码。我尝试过UTF-8、ASCII等等。importrewithopen("mixture1.dat",\'r\',encoding="ascii",errors="surrogateesca... 查看详情

Autoexp.dat 版本

】Autoexp.dat版本【英文标题】:Autoexp.datVersions【发布时间】:2012-05-2416:05:40【问题描述】:我正在做一个项目,我需要在几个不同的(不兼容的)autoexp.dat文件之间进行切换。目前,这涉及关闭VisualStudio的所有实例,将我想要的... 查看详情

将数据保存为 *.dat 文件?

】将数据保存为*.dat文件?【英文标题】:Savedataasa*.datfile?【发布时间】:2017-10-3114:42:28【问题描述】:我正在用Python编写一个程序,它应该导入*.dat文件,从某些列中减去一个特定值,然后将文件以*.dat格式保存在不同的目录中... 查看详情

如何使用外部表功能加载 .dat 文件

】如何使用外部表功能加载.dat文件【英文标题】:Howtouseexternaltablefeaturetoload.datfile【发布时间】:2021-03-0112:38:18【问题描述】:我希望使用oracle外部表功能导入.dat文件。文件格式如下,文件名为test_210228053753.dat00000000000005000.0051... 查看详情

dat.gui 如何用代码隐藏菜单

】dat.gui如何用代码隐藏菜单【英文标题】:dat.guihowtohidemenuwithcode【发布时间】:2013-02-0515:05:25【问题描述】:我使用dat.gui为我的Three.js应用程序制作了一个菜单。它工作正常,我还发现按h键可以隐藏使用dat.gui创建的菜单。我... 查看详情

textmod.dat(代码片段)

查看详情