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