为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DB Version: 0x7000c DM Database Server 64 V8
【操作系统】:Kylin Linux Advanced Server V10(Lance)
【CPU】:Single core AMD Ryzen 7 5700G with Radeon Graphics 64bit
【问题描述】*:
我使用EFCore来操作达梦数据库。
有个业务需要操作两张表,执行的SQL如下:
表一:
SELECT
CASE
WHEN EXISTS (
SELECT
1
FROM "LANGUAGES" AS "l"
WHERE "l"."TenantId" = 1 /* :__language_TenantId_0 */ AND
"l"."Name" = 'ja' /* :__language_Name_1 */)
THEN TRUE
ELSE FALSE
END
SELECT TOP(1) "r"."Id",
"r"."ConcurrencyStamp",
"r"."CreationTime",
"r"."CreatorUserId",
"r"."DeleterUserId",
"r"."DeletionTime",
"r"."Description",
"r"."DisplayName",
"r"."HospitalID",
"r"."IsDefault",
"r"."IsDeleted",
"r"."IsStatic",
"r"."LastModificationTime",
"r"."LastModifierUserId",
"r"."Name",
"r"."NormalizedName",
"r"."TenantId"
FROM "ROLES" AS "r"
WHERE ("r"."TenantId" IS NULL)
AND "r"."Name" = 'admin'
表二:
INSERT INTO "ROLES" (
"ConcurrencyStamp",
"CreationTime",
"CreatorUserId",
"DeleterUserId",
"DeletionTime",
"Description",
"DisplayName",
"HospitalID",
"IsDefault",
"IsDeleted",
"IsStatic",
"LastModificationTime",
"LastModifierUserId",
"Name",
"NormalizedName",
"TenantId")
VALUES (
'0f491f43-557a-4b2a-b6cb-2bb83f8f545f' /* :p0 */,
'2024-06-28T16:26:12' /* :p1 */,
NULL /* :p2 */,
NULL /* :p3 */,
NULL /* :p4 */,
NULL /* :p5 */,
'admin' /* :p6 */,
0 /* :p7 */,
1 /* :p8 */,
0 /* :p9 */,
1 /* :p10 */,
NULL /* :p11 */,
NULL /* :p12 */,
'admin' /* :p13 */,
'ADMIN' /* :p14 */,
NULL /* :p15 */)
;
SELECT
"Id"
FROM "ROLES"
WHERE sql%ROWCOUNT = 1 AND
"Id" = scope_identity(
)
;
执行这些操作使用的是同一个DbContext实例,在执行到表二的操作时,报告了 Parameter '__LANGUAGE_TENANTID_0' not found in the collection 错误。
可以看到**__LANGUAGE_TENANTID_0**是操作表一是使用的参数,我在表一的操作按理来说已经结束了,为什么在操作表二时报告了缺少执行表一时所需的参数呢?
从数据库安装路径dmdbms\drivers\dotNet下获取对应驱动,其次你这个报错是不是解析有问题?排查一下