为避免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 |