Oracle数据类型引起的性能问题(已经解决)!
为避免SQL-注入,所有的update,insert,delete,select全部使用带参数的形式编写
Update TableName Set FiledName=:Fd1 where Id=:Id
ID Oracle类型是 Varchar2对应DbType.String
问题来了,由于类型映射不匹配,导致在执行SQL时Oracle会自动转换类型,这样直接导致无法使用到索引(全部全表扫描),所以update,delete时效率特别差
后修改代码
ID Oracle类型是 Varchar2对应DbType.AnsiString
问题解决了,可以用使用到索引。
Oracle 数据类型 |
要绑定为参数的 DbType 枚举 |
要绑定为参数的 OracleType 枚举 |
备注 |
---|---|---|---|
BFILE |
|
BFile |
Oracle 只允许将 BFILE 绑定为 BFILE 参数。 如果您尝试绑定一个非 BFILE 值(如 byte[] 或 OracleBinary),适用于 Oracle 的 .NET 数据提供程序并不会自动为您构造这样的值。 |
BLOB |
|
Blob |
Oracle 只允许将 BLOB 绑定为 BLOB 参数。 如果您尝试绑定一个非 BLOB 值(如 byte[] 或 OracleBinary),适用于 Oracle 的 .NET 数据提供程序并不会自动为您构造这样的值。 |
CHAR |
AnsiStringFixedLength |
Char |
|
CLOB |
|
Clob |
Oracle 只允许将 CLOB 绑定为 CLOB 参数。 如果您尝试绑定一个非 CLOB 值(如 System.String 或 OracleString),适用于 Oracle 的 .NET 数据提供程序并不会自动为您构造这样的值。 |
DATE |
DateTime |
DateTime |
|
FLOAT |
Single、Double、Decimal |
Float、Double、Number |
Size 确定 System.Data.DBType 和 OracleType。 |
INTEGER |
SByte、Int16、Int32、Int64、Decimal |
SByte、Int16、Int32、Number |
Size 确定 System.Data.DBType 和 OracleType。 |
INTERVAL YEAR TO MONTH |
Int32 |
IntervalYearToMonth |
只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。 |
INTERVAL DAY TO SECOND |
Object |
IntervalDayToSecond |
只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。 |
LONG |
AnsiString |
LongVarChar |
|
LONG RAW |
Binary |
LongRaw |
|
NCHAR |
StringFixedLength |
NChar |
|
NCLOB |
|
NClob |
Oracle 只允许将 NCLOB 绑定为 NCLOB 参数。 如果您尝试绑定一个非 NCLOB 值(如System.String 或 OracleString),适用于 Oracle 的 NET 数据提供程序并不会自动为您构造这样的值。 |
NUMBER |
VarNumeric |
Number |
|
NVARCHAR2 |
String |
NVarChar |
|
RAW |
Binary |
Raw |
|
REF CURSOR |
|
Cursor |
有关更多信息,请参见Oracle REF CURSOR。 |
ROWID |
AnsiString |
Rowid |
|
TIMESTAMP |
DateTime |
Timestamp |
只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。 |
TIMESTAMP WITH LOCAL TIME ZONE |
DateTime |
TimestampLocal |
只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。 |
TIMESTAMP WITH TIME ZONE |
DateTime |
TimestampWithTz |
只有在同时使用 Oracle 9i 客户端和服务器软件时,OracleType 才可用。 |
UNSIGNED INTEGER |
Byte、UInt16、UInt32、UInt64、Decimal |
Byte、UInt16、Uint32、Number |
Size 确定 System.Data.DBType 和 OracleType。 |
VARCHAR2 |
AnsiString |
VarChar |
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix