为避免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 |
||
|
BLOB |
Blob |
||
|
CHAR |
AnsiStringFixedLength |
Char |
|
|
CLOB |
Clob |
||
|
DATE |
DateTime |
DateTime |
|
|
FLOAT |
Single、Double、Decimal |
Float、Double、Number |
|
|
INTEGER |
SByte、Int16、Int32、Int64、Decimal |
SByte、Int16、Int32、Number |
|
|
INTERVAL YEAR TO MONTH |
Int32 |
IntervalYearToMonth |
|
|
INTERVAL DAY TO SECOND |
Object |
IntervalDayToSecond |
|
|
LONG |
AnsiString |
LongVarChar |
|
|
LONG RAW |
Binary |
LongRaw |
|
|
NCHAR |
StringFixedLength |
NChar |
|
|
NCLOB |
NClob |
||
|
NUMBER |
VarNumeric |
Number |
|
|
NVARCHAR2 |
String |
NVarChar |
|
|
RAW |
Binary |
Raw |
|
|
REF CURSOR |
Cursor |
||
|
ROWID |
AnsiString |
Rowid |
|
|
TIMESTAMP |
DateTime |
Timestamp |
|
|
TIMESTAMP WITH LOCAL TIME ZONE |
DateTime |
TimestampLocal |
|
|
TIMESTAMP WITH TIME ZONE |
DateTime |
TimestampWithTz |
|
|
UNSIGNED INTEGER |
Byte、UInt16、UInt32、UInt64、Decimal |
Byte、UInt16、Uint32、Number |
|
|
VARCHAR2 |
AnsiString |
VarChar |
OracleParameter 对象的 Value 属性使用的 InputOutput、Output 和 ReturnValue ParameterDirection 值是 .NET Framework 数据类型,除非输入值是 Oracle 数据类型(例如 OracleNumber 或 OracleString)。这并不适用于 REF CURSOR、BFILE 或 LOB 数据类型。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15080520号-20 珠峰网 版权所有 All Rights Reserved
|