c# 使用update更新成功但数据库没有变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 使用update更新成功但数据库没有变化相关的知识,希望对你有一定的参考价值。

我想把数据表(LanMu)里面的第一行的栏目信息改为aaaaaa,执行下面代码后数据表里面的数据没有改变,但使用OleDbDataReader读取出来的内容却又是aaaaaa,这到底是为什么?
string connstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\webCount.mdb;Persist Security Info=False;";
OleDbConnection conn = new OleDbConnection(connstr);
conn.Open();
OleDbCommand cmd = new OleDbCommand(@"update LanMu set LanMu = 'aaaaaa' where id = 1", conn);
cmd.ExecuteNonQuery();

OleDbCommand cmd1 = new OleDbCommand("Select id,LanMu from LanMu", conn);
OleDbDataReader dr = cmd1.ExecuteReader();
while (dr.Read())
Console.WriteLine("输出栏目:" + dr[0].ToString() + " " + dr[1].ToString());

conn.Close();

输出的结果 :
输出栏目:1 aaaaaa
输出栏目:2 党务公开

毫无疑问,数据库确实被更改了。

无论你使用何种工具查看的数据库,都请 刷新结果 重新执行查询语句 。此外请检查一下你查看的数据库是否代码中操作的数据库。

参考技术A 跟踪一下数据库,看一看! 参考技术B 是不是你没刷新啊,你看到的还是原来读取的数据

带有 TypeScript 的 Firebase Cloud Functions:实时数据库更新以成功结束但没有更新任何内容,JS 工作正常

【中文标题】带有 TypeScript 的 Firebase Cloud Functions:实时数据库更新以成功结束但没有更新任何内容,JS 工作正常【英文标题】:Firebase Cloud Functions with TypeScript: Realtime Database update ends with success but not updates anything, JS works fine 【发布时间】:2021-11-12 15:15:40 【问题描述】:

我使用 Firebase CLI 将 Cloud Functions 添加到 Firebase 项目。我从 JavaScript 开始,设法编写工作代码。

然后我决定改用 TypeScript。所以我决定删除所有与 Cloud Functions JS 相关的文件,并从头开始使用firebase init cmd。我将代码从 index.js 复制到 index.ts,只需要更改 dataMap Map 的声明方式。

所以,现在每当我查看 Firebase 上的控制台日志时,一切似乎都运行良好,一切都已注销,并且我在客户端收到了成功消息。

然而,实时数据库中什么也没有发生,没有更新,没有任何数据的踪迹。

我对 JS / TS 几乎一无所知,因此欢迎提出有关代码和解决方案的所有建议。

我正在使用节点:14.17.6,并将 firebase-tools 更新到 9.18.0,firebase-admin 更新到 9.11.1,firebase-functions 更新到 3.15.6。

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
admin.initializeApp();

exports.createItemWithVIP = functions.region("europe-west1").
    https.onCall((data, context) => 
      // Checking that the user is authenticated.
      if (!context.auth) 
        console.log("Unauthenticated request");
        throw new functions.https.HttpsError("permission-denied", "You have" +
          " no permission to perform this operation");
      

      // item details
      const foo = data.foo;
      const bar = data.bar;
      console.log(`foo: $foo, bar: $bar`);

      const userUID = context.auth.uid;
      console.log(`userUID: $userUID`);

      const db = admin.database();
      // get new item uid
      const somePathTableReference = db.ref("somePath/").push();
      const itemUID = `$somePathTableReference`
          .split("somePath/")[1];
      console.log(`itemUID: $itemUID`);

      const itemPath = `somePath/$itemUID`;
      const userPath = `users/$userUID/somePath/$itemUID`;

      const dataMap = new Map<string, unknown>();
      dataMap.set(`$itemPath/vip/$userUID`, true);
      dataMap.set(`$itemPath/foo`, foo);
      dataMap.set(`$itemPath/bar`, bar);
      dataMap.set(`$userPath/role`, "vip");
      dataMap.set(`$userPath/foo`, foo);
      dataMap.set(`$userPathbar`, bar);

      dataMap.forEach((value: unknown, key: string) =>
        console.log(key, value));

      return db.ref("/").update(dataMap).then(() => 
        console.log(`Added new item with key: $itemUID ` +
          `; added vip role to user $userUID`);
        return "message": "Success";
      ).catch((e) => 
        console.log(`Error: $e`);
        throw new functions.https.HttpsError("unknown", "Unknown error" +
          "occured");
      );
    );


【问题讨论】:

如果没有写入任何内容,尝试调试所有这些代码并不是调试问题的非常有效的第一步。如果你用return db.ref("test").set(true); 替换整个函数体,这个值会被写入吗? 你有没有机会使用模拟器? @FrankvanPuffelen 我相信,我检查了一些简单的update 案例,但它仍然是 TS Map,这就是问题的原因。我也误解了 JS/TS 语法,正如我在 Dharmaraj 回答下面所说的那样。但是,是的,你的简单 update 案例正在工作:) @Hydra 这里没有模拟器 :) 【参考方案1】:

我不完全确定原因,但直接使用对象而不是 new Map() 进行更新似乎有效(是的,它不适用于我的地图):

const dMap = 
  [`$itemPath/vip/$userUID`]: true,
  [`$itemPath/foo`]: foo,
  [`$itemPath/bar`]: bar,
  [`$userPath/role`]: "vip",
  [`$userPath/foo`]: foo,
  [`$userPathbar`]: bar


try 
  await db.ref("/").update(dMap);
  console.log(`Added new item with key: $itemUID; added vip role to user $userUID`);

  return "message": "Success";
 catch (e) 
  console.log(`Error: $e`);
  throw new functions.https.HttpsError("unknown", "Unknown error" +
    "occured");

【讨论】:

但是我认为由于我缺乏 JS / TS 知识而发生错误。因为来自 表示映射的 Dart 世界,所以我之前在我的 JS 代码中将 dataMap 变量声明为:const dataMap = ; dataMap["key"] = "foo"; 当为 设置值时像这样 dataMap[$itemPath/foo] = foo; 不再有效,我刚刚找到了声明地图的TS方式。不过好像从来都不是经典地图?但是某种Object 类型:) @paj-co 所以对象和地图有点类似于this answer。 “不再有效”是什么意思?你能分享错误吗?此外,最好再问一个问题来澄清这一点,这样这个问题就会得到更多的意见,而不是在这里的 cmets。 我的意思是,我可以在 JavaScript 中做到这一点 const dataMap = ; dataMap["key"] = "foo";,但在 TypeScript VS Code 中,我用红色下划线显示错误:Element implicitly has an 'any' type because expression of type '"key"' can't be used to index type ''. Property 'key' does not exist on type ''. 我真的不知道 JS / TS。而且我认为我的问题是由于我缺乏语言和语法而发生的,所以我认为我不能在这个主题上问另一个合适的问题:)【参考方案2】:

这对我有用。

const dMap:  [key: string]: any;  = ;

dMap[`$itemPath/vip/$userUID`]= true;
dMap[`$itemPath/foo`]= foo;
dMap[`$itemPath/bar`]= bar;
dMap[`$userPath/role`]= "vip";
dMap[`$userPath/foo`]= foo;
dMap[`$userPathbar`]= bar;

db.ref().update(dMap);

【讨论】:

以上是关于c# 使用update更新成功但数据库没有变化的主要内容,如果未能解决你的问题,请参考以下文章

C# SqlDataAdapter.Update()

mybatis update数据时无异常但没更新成功

更新在控制台中读取成功,但数据库不受影响

C# sqlsever数据库 通过datatable更新数据问题

C# 代码执行并且数据库表成功更新但仍然出现错误

C#中执行insert的SQL语句成功(返回受影响行数为1)却没有在数据库中insert,知道啥原因么?