SqlDataAdapter.update() 不更新数据库

2023-12-10

我正在使用 PostLikes 表搜索 (PostId,UserId)SqlDataAdapter,如果找到该行,我正在使用SqlCommandBuilder.GetDeleteCommand()生成删除指令并删除底层行,如果找不到该行,那么我使用SqlCommandBuilder.GetInsertCommand()生成插入命令并将行插入到表中使用SqlDataAdapter.Update()。但该行没有插入到数据库中的表中。这是我到目前为止所做的

SqlConnection con = new SqlConnection(connectionStrings);
SqlDataAdapter sqlDataAdapter=new SqlDataAdapter("select * from PostLikes where PostId like "
                                                 +postlike.PostId+" and UserId like "
                                                 +postlike.UserId,con);
DataSet ds = new DataSet();
sqlDataAdapter.Fill(ds, "Result");
con.Open();
SqlCommandBuilder sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter);
if(ds.Tables["Result"].Rows.Count==1)
{
    sqlDataAdapter.DeleteCommand = sqlCommandBuilder.GetDeleteCommand(true);
    msg = "Data is deleted";
}
else
{
    sqlDataAdapter.InsertCommand = sqlCommandBuilder.GetInsertCommand(true);
    msg = "Data is inserted";
}
sqlDataAdapter.Update(ds, "Result");

和桌子
帖子喜欢(喜欢 ID、帖子 ID、用户 ID)


有几个问题:

  • 您希望重用相同的命令来检测该行是否存在,并提供给SqlAdapter为了SqlCommandBuilder.
  • 您应该参数化初始选择查询以防止 Sql 注入攻击(并且有一点性能优势)。 CommandBuilder 将自动参数化Insert / Delete命令
  • 使用以下命令创建插入/删除命令后SqlCommandBuilder,然后您需要更改基础数据集,以便在执行期间对表进行任何更改Update.
  • 请注意,许多 Sql 对象是IDisposable并应尽快处置 -using范围在这里有帮助。

.

var postId = 1;
var userId = 1;
string msg;
using (var con = new SqlConnection(@"data source=..."))
using (var selectCommand = new SqlCommand(
 "select LikeId, PostId, UserId from PostLikes WHERE PostId=@PostId AND UserId=@UserId", con))
using (var sqlDataAdapter = new SqlDataAdapter(selectCommand))
using (var ds = new DataSet())
{
    con.Open();
    selectCommand.Parameters.AddWithValue("@PostId", postId);
    selectCommand.Parameters.AddWithValue("@UserId", userId);
    sqlDataAdapter.Fill(ds, "Result");
    using (var sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter))
    {
        if (ds.Tables["Result"].Rows.Count == 1)
        {
            sqlDataAdapter.DeleteCommand = sqlCommandBuilder.GetDeleteCommand(true);
            ds.Tables["Result"].Rows[0].Delete();
            msg = "Data will be deleted";
        }
        else
        {
            sqlDataAdapter.InsertCommand = sqlCommandBuilder.GetInsertCommand(true);
            // Null because LikeId is Identity and will be auto inserted
            ds.Tables["Result"].Rows.Add(null, postId, userId);
            msg = "Data will be inserted";
        }
        sqlDataAdapter.Update(ds, "Result");
    }
}

我假设了以下架构:

CREATE TABLE PostLikes
(
    LikeId INT IDENTITY(1,1) PRIMARY KEY,
    PostId INT,
    UserId INT
)

我假设您想要“切换”行的插入或删除postId, userid组合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SqlDataAdapter.update() 不更新数据库 的相关文章

  • 使用联接更新表?

    我正在尝试使用表 B 中的数据更新表 A 我以为我可以做这样的事情 update A set A DISCOUNT 3 from INVOICE ITEMS A join ITEM PRICE QUNTITY B on A ITEM PRI
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • 如何将SQL数据加载到Hortonworks中?

    我已在我的电脑中安装了 Hortonworks SandBox 还尝试使用 CSV 文件 并以表结构的方式获取它 这是可以的 Hive Hadoop nw 我想将当前的 SQL 数据库迁移到沙箱 MS SQL 2008 r2 中 我将如何做
  • postgresql:插入...(选择*...)

    我不确定它是否是标准 SQL INSERT INTO tblA SELECT id time FROM tblB WHERE time gt 1000 我正在寻找的是 如果 tblA 和 tblB 位于不同的数据库服务器中怎么办 Postg
  • 3 个表的 SQL 查询(或联接)

    第一次在 Stack Overflow 上问问题 很棒的资源 但是只有一件事真正让我作为 SQL 新手感到困惑 我有三个表 我想获取与鲍勃的学生相关的所有导师的姓名 表 1 教师 ID Name 1 Bob 表 2 学生 STUDENT I
  • 如何拥有引用另一个表的检查约束?

    我在 SQL Server 2008 数据库中有以下表 tblItem 其中有一个ItemID field 好项目 它还有一个 ItemID 字段 并且有一个指向 tblItem 的外键 tblBadItem 它也有一个 ItemID 字段
  • 时间序列数据的自连接

    我需要一些帮助来完成我认为应该是相当简单的自连接查询 只需要将两条记录中匹配的开始时间和结束时间合并为一条记录 假设我的表中有以下内容 Time Event 08 00 Start 09 00 Stop 10 30 Start 10 45
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • SQL 标准是否允许函数名和括号之间有空格

    检查一些 RDBMS 我发现类似的事情 SELECT COUNT a SUM b FROM TABLE 允许 注意聚合函数和括号之间的空格 谁能提供一个指向 SQL 标准本身定义的指针 任何版本都可以 编辑 以上在postgres中工作 m
  • 通过 C# SqlCommand 执行合并语句不起作用

    我正在第一次尝试使用临时表和MERGE语句通过更新 SQL 表SqlCommandC 中的对象 我正在开发的程序旨在首先将大量记录 最多 20k 导出到 Excel 电子表格中 然后 用户可以搜索并替换特定值 并根据需要更新任意多记录中的任
  • Ruby ActiveRecord 和 sql 元组支持

    ActiveRecord 是否支持 where 子句中的元组 假设底层数据库支持 结果 where 子句看起来像这样 where name address in John 123 Main St I tried Person where n
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 多边形内的 SQL 地理点在 STIntersect 上不返回 true(但使用 Geometry 返回 true)

    我不想仅仅为了在 STIntersect 中返回 true 而将地理数据转换为几何图形 下面是 SQL 中的代码 DECLARE point GEOGRAPHY GEOGRAPHY Point 1 1 4326 DECLARE polygo
  • 如何使用 MySQL 选择有特定值的 2 个连续行?

    我正在构建一个系统 该系统应该显示学生何时连续缺席两天 例如 此表包含缺勤情况 day id missed 2016 10 6 1 true 2016 10 6 2 true 2016 10 6 3 false 2016 10 7 1 tr
  • SKIP加锁和nowait的区别

    pl sql 中 SKIP 锁定游标和 nowait 游标之间的区别 我认为我找到的这张图片是描述差异的最佳例子 详细说明 http viralpatel net blogs oracle skip locked
  • 从表中选择行,其中另一个表中具有相同 id 的行在另一列中具有特定值

    在 MySQL 中 如果我们有两个表 comments key value 1 foo 2 bar 3 foobar 4 barfoo and meta comment key value 1 1 2 1 3 2 4 1 我想得到来自以下人
  • 重用 t-sql 游标的起始位置?

    我正在开发一个在临时表上使用游标的存储过程 我已经阅读了一些关于为什么不需要游标的内容 但在这种情况下我相信我仍然需要使用游标 在我的过程中 我需要遍历表的行两次 声明游标后 已经单步执行临时表并关闭游标 重新打开时游标的位置是否仍保留在表
  • CONTAINS 不适用于 Oracle Text

    我在执行此查询时遇到问题 SELECT FROM gob attachment WHERE CONTAINS gob a document java gt 0 它给了我 ORA 29902 error in executing ODCIIn

随机推荐

  • jquery validator - 仅验证可见元素

    我有一个隐藏 显示 div 的单选按钮 所有可见元素都是 必需的 但是在验证规则之后添加ignore hidden 不起作用 这是代码
  • 将序列划分为唯一对的集合

    我需要一个 of 函数 它可以将序列分成对 然后将它们组合起来 以便组合中的所有元素都是唯一的 我已经尝试了多种使用 python 的 itertools 的方法 但还没有找到解决方案 为了说明这一点 我想要一个采用以下序列的函数 1 2
  • 使用 UserDefaults 保存图像数组

    我有一个应用程序 用户可以在其中拍照 拍照后应将其保存到UserDefaults 我不断收到此错误 cannot invoke setObject with an argument list of type UIImage type for
  • 如何获取android上每个cpu核心的使用情况

    我在 Android 上开发了一个小部件 它显示许多有用的信息 我正在尝试修改此方法以返回一个 cpu 核心的使用百分比 以便获得每个核心的使用百分比 在我的 HTC One X 上 我在 proc stat 中有 cpu 183549 1
  • 如何将 scikit-learn 数据集写入 csv 文件

    我可以从以下位置加载数据集scikit learn using from sklearn import datasets data datasets load boston print data 我想做的是将这个数据集写入一个平面文件 cs
  • 无法对实体框架 6 使用 MySQL 连接

    我正在尝试将实体框架 6 与 MySQL 一起使用 我确实为 Visual Studio 1 1 1 和 MySQL Net 连接器 6 8 3 安装了 MySQL 插件 问题是当我尝试创建新的 ADO NET 实体模型时 我无法选择 My
  • 为什么我不能在此三元运算中将 int 转换为字符串

    为了简洁起见 我留下了一些代码 int id Convert ToInt32 Page RouteData Values id var q db Categories SingleOrDefault x gt x categoryID id
  • Android 地点选择器启动后立即关闭

    我正在开发一个android应用程序作为项目的一部分 并使用Google地方API来根据位置显示感兴趣的地方 我正在使用 PlacePicker Inentbuilder 来完成此任务 但是 当应用程序运行时 地点选择器会启动 然后立即关闭
  • 在 WPF 应用程序中嵌入 Unity3D 应用程序

    我想在 WPF 中开发一个新的 CAD 软件 而不是使用 WPF 3D 是否可以使用 Unity3D 作为我的图形引擎 能够根据 WPF 中的数据对象旋转 平移 缩放和查看 3D 图形对象 我问这个问题的原因是 Unity 是一个游戏引擎
  • 重写 WPF 控件

    我有一个来自第三方的 WPF 控件 ParentWPFControl 我想继承该控件 我们将其称为子类 ChildWPFControl 在这个过程中 我计划重写一些后端逻辑和部分前端样式 前者我可以做得很好 但后者我有问题 我尝试对子国家
  • java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。在 API 上小于 24

    com android volley NoConnectionError javax net ssl SSLHandshakeException java security cert CertPathValidatorException T
  • 删除其中没有资源的 Azure 资源组

    我正在尝试查找其中没有资源的所有 Azure RM 资源组 并使用 PowerShell 删除这些资源组 使用 Portal 删除非常耗时 使用 powershell 我可以通过使用以下代码来完成 在 powershell 中是否有更好的方
  • 与 protobuf-net 和 C# 的接口

    有谁知道建立一个的正确方法是什么合约原型 for an 界面 我收到以下异常 一旦生成序列化器 类型就无法更改 仅使用属性 使用的代码 ProtoContract public class Lesson5TestClass2 ILesson
  • 在单个语句中处理区分大小写和不区分大小写的正则表达式模式

    我有一个小的正则表达式要处理 我有两个不同的术语 美国 我想忽略大小写来匹配 US 我想匹配without忽略大小写 我想在单个正则表达式替换语句中执行以下两个正则表达式替换 clntxt re sub i United States US
  • 通过代码隐藏中的按钮单击处理程序中的 ID 访问 DataList 中的 TextBox

    我有一个文本框 保存在数据列表中 我需要通过 ID 找到它 以便我可以将写入该文本框的文本插入到数据库中 这是我的包含文本框的 aspx 页面
  • Microsoft 日志记录应用程序块和多线程

    我是日志应用程序块 4 1 的新手 有人编写过从多个线程使用日志记录应用程序块的应用程序吗 我问这个问题是因为 Logger 是一个静态类 并且可能会从多个线程写入同一日志文件 日志应用程序块是线程安全的 这意味着您可以从多个线程调用其公共
  • cURL 无法在本地服务器中使用客户端证书

    我使用 XAMPP 设置了本地服务器 我有两个 PHP 脚本 一个发送者和一个接收者 我正在尝试使用 HTTP over SSL HTTPS 将 XML 文件从发送方发送到接收方 我创建了一个自签名证书 配置了 XAMPP 并且我在发件人上
  • @solana/web3.js 有 ERC721 元数据的 API 吗?

    给定一个代币铸造地址 我正在寻找一种方法来访问 ERC721 代币的元数据 solana web3 js 中有 API 吗 Solana 将代币元数据存储在从原始代币地址派生的地址中https docs solana com develop
  • 通过动态属性从对象数组创建对象

    我有一个对象数组 options width 10 height 20 width 20 height 40 width 30 height 60 我想转换为以下内容 width 10 20 30 height 20 40 60 现在请记住
  • SqlDataAdapter.update() 不更新数据库

    我正在使用 PostLikes 表搜索 PostId UserId SqlDataAdapter 如果找到该行 我正在使用SqlCommandBuilder GetDeleteCommand 生成删除指令并删除底层行 如果找不到该行 那么我