追踪的SQL为:
UPDATE "TTT_TEST" SET "AGE" = CASE "ID"
WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN 11
WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN 11 END, "NAME" = CASE "ID"
WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN 'testyyyy'
WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN 'testyyyy' END, "BIRTH_DAY" = CASE "ID"
WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN to_timestamp('2021-06-07 11:22:05.000000','YYYY-MM-DD HH24:MI:SS.FF6')
WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN to_timestamp('2021-06-07 11:22:05.000000','YYYY-MM-DD HH24:MI:SS.FF6') END, "POINT" = CASE "ID"
WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN 2.2
WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN 2.2 END, "SEX" = CASE "ID"
WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN 1
WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN 1 END
WHERE ("ID" IN ('7e1995f3-b4a8-4166-9bdd-c770c0cbd94a','6a2efe34-bc6e-48a9-80fe-48720c19534e'))
实体模型:
[Table(Name = "TTT_TEST")]
public class TestClass
{
[Column(Name = "ID", IsPrimary = true)]
public string No { get; set; }
public int? Age { get; set; }
public string Name { get; set; }
[Column(Name = "BIRTH_DAY")]
public DateTime? Birthday { get; set; }
public decimal Point { get; set; }
public Sex? Sex { get; set; }
}
问题描述及重现步骤:
使用fsql.Update().SetSource(entitys) 进行批量更新的时候出现错误。
UpdateTest1
源: DataAccesserTests.cs 行 755
持续时间: 1.2 秒
消息: Test method Medicalsystem.IntegrationPortal.Framework.Data.Tests.DataAccesserTests.UpdateTest1 threw exception: System.Exception: ORA-12704: 字符集不匹配 ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-12704: 字符集不匹配 堆栈跟踪: OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, OracleException& exceptionForArrayBindDML, OracleConnection connection, OracleLogicalTransaction& oracleLogicalTransaction, Boolean isFromEF) OracleCommand.ExecuteNonQuery() AdoProvider.ExecuteNonQuery(DbConnection connection, DbTransaction transaction, CommandType cmdType, String cmdText, Int32 cmdTimeout, DbParameter[] cmdParms) --- End of inner exception stack trace --- AdoProvider.LoggerException(IObjectPool
1 pool, PrepareCommandResult pc, Exception ex, DateTime dt, StringBuilder logtxt, Boolean isThrowException) AdoProvider.ExecuteNonQuery(DbConnection connection, DbTransaction transaction, CommandType cmdType, String cmdText, Int32 cmdTimeout, DbParameter[] cmdParms) UpdateProvider
1.RawExecuteAffrows() UpdateProvider1.SplitExecuteAffrows(Int32 valuesLimit, Int32 parameterLimit) OracleUpdate
1.ExecuteAffrows() DataAccesser.Update[T](IEnumerable`1 entitys) 行 147 DataAccesserTests.UpdateTest1() 行 788追踪的SQL为: UPDATE "TTT_TEST" SET "AGE" = CASE "ID" WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN 11 WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN 11 END, "NAME" = CASE "ID" WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN 'testyyyy' WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN 'testyyyy' END, "BIRTH_DAY" = CASE "ID" WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN to_timestamp('2021-06-07 11:22:05.000000','YYYY-MM-DD HH24:MI:SS.FF6') WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN to_timestamp('2021-06-07 11:22:05.000000','YYYY-MM-DD HH24:MI:SS.FF6') END, "POINT" = CASE "ID" WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN 2.2 WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN 2.2 END, "SEX" = CASE "ID" WHEN N'7e1995f3-b4a8-4166-9bdd-c770c0cbd94a' THEN 1 WHEN N'6a2efe34-bc6e-48a9-80fe-48720c19534e' THEN 1 END WHERE ("ID" IN ('7e1995f3-b4a8-4166-9bdd-c770c0cbd94a','6a2efe34-bc6e-48a9-80fe-48720c19534e'))
实体模型:
数据库表:
-- Table structure for TTT_TEST
DROP TABLE "CPCUSER"."TTT_TEST"; CREATE TABLE "CPCUSER"."TTT_TEST" ( "ID" VARCHAR2(36 BYTE) NOT NULL, "NAME" VARCHAR2(255 BYTE), "AGE" NUMBER, "BIRTH_DAY" DATE, "POINT" NUMBER(8,1), "SEX" NUMBER(1,0) ) LOGGING NOCOMPRESS PCTFREE 10 INITRANS 1 STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT ) PARALLEL 1 NOCACHE DISABLE ROW MOVEMENT ;
-- Primary Key structure for table TTT_TEST
ALTER TABLE "CPCUSER"."TTT_TEST" ADD CONSTRAINT "SYS_C0098604" PRIMARY KEY ("ID");
测试代码:
其中DataAccesser的Update(entities)封装为:
数据库的具体版本
安装的包
.net framework/. net core? 及具体版本