关于参数中ORACLE数据类型长度问题,在线等。谢谢,。,

ZiRRen 2009-01-09 10:59:29

OracleParameter[] parameters = {
new OracleParameter(":FUND", OracleType.Number,4),
}


int64 fund=18位数(我是赋值--执行SQL--插入到表这样一过程,涉及不到页面长度控制)

这里的4,应该是数据长度吧,应该是32位和INT32对应的吧。
但是我为什么改成1照样能输入18位长度的数字呢,而不是截取或者报错.
这里照样能执行过去。为什么?

但是当是VarChar的时候,我设置了长度,如果我输入的超过了这里限定的长度就会截取呢?

注:我数据库的字段长度足够大.
...全文
398 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chooseforget 2009-09-19
  • 打赏
  • 举报
回复
我也遇到了同样的问题啊。
Fibona 2009-01-09
  • 打赏
  • 举报
回复
System.Data.Oracle.Client namespace means you're using Microsoft .NET Data Provider for Oracle and not ODP.NET. You should use OracleDbType.Decimal instead of OracleDbType.Number with MS provider.

如果你的数据库中是NUMBER,用System.Data.Oracle.Client时,参数数据类型用OracleDbType.Decimal来代替
ZiRRen 2009-01-09
  • 打赏
  • 举报
回复
似乎明白了,谢谢。
vrhero 2009-01-09
  • 打赏
  • 举报
回复
为什么不去看MSDN...几分钟就能看明白...


设置 Size 仅影响参数的输入值。此属性不影响返回值和输出参数。

Size 属性用于二进制和字符串类型。

对于非字符串数据类型和 ANSI 字符串数据,Size 属性是指字节数。对于 Unicode 字符串数据,Size 指的是字符数。字符串的计数不包括终止字符。

对于可变长度数据类型,Size 描述传输给服务器的最大数据量。例如,对于一个 Unicode 字符串值,可以用 Size 将发送到服务器的数据量限制为前一百个字符。

对于双向参数、输出参数和返回值,必须设置 Size 的值。输入参数时对此没有要求,如果没有显式设置,则该值会在执行参数化语句时根据指定参数的实际大小推断而得。

通过设置 Value,可以推导出参数的 DbType、OracleType 和 Size 属性。因此,无需指定它们。但是,在 OracleParameter 属性设置中并未公开它们。例如,如果已推断出参数的大小,则语句执行后 Size 不包含推断的值。

对于固定长度数据类型,忽略 Size 的值。
ZiRRen 2009-01-09
  • 打赏
  • 举报
回复
只能用?怎么用呢,能举一个例子吗?


程序中定义没用?那VChar,定义了怎么有用?
vrhero 2009-01-09
  • 打赏
  • 举报
回复
回复1楼的,不知道你实际看了没有,oracletype里面没有decimal这个类型是。
----------
Oracle是没有decimal类型,但是它是对应NUMBER类型的而且只能用decimal类型...

回复2,3楼的,长度写与不写,写多少都是一样的。
----------
NUMBER类型长度由数据库结构定义,你在程序中指定是没有用的...
ZiRRen 2009-01-09
  • 打赏
  • 举报
回复
楼上的意思是说INT型的不需要限制是吗?或者说是限制与不限制没有区别是吗?

只是针对Vchar之类的字符型的是吗。

那位什么不在我前面选择了NUMBER之后不让我出后面的长度选择呢?

这样是不是给我造成错觉了?
GTX280 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 ZiRRen 的帖子:]
C# codeOracleParameter[] parameters={newOracleParameter(":FUND", OracleType.Number,4),
}

int64 fund=18位数(我是赋值--执行SQL--插入到表这样一过程,涉及不到页面长度控制)

这里的4,应该是数据长度吧,应该是32位和INT32对应的吧。
但是我为什么改成1照样能输入18位长度的数字呢,而不是截取或者报错.
这里照样能执行过去。为什么?

但是当是VarChar的时候,我设置了长度,如果我输入的超过了这里限定的长度就…
[/Quote]
这个长度只是针对varchar的吧,字符类型在数据库中需要有位数限制,数字类型不用(Sql Server也是这样,int、bigint都没有设位数,nchar和nvarchar有位数)
参考MSDN上的例子
http://msdn.microsoft.com/zh-cn/library/system.data.oracleclient.oracleparameter(VS.80).aspx
ZiRRen 2009-01-09
  • 打赏
  • 举报
回复
System.Data.Oracle.Client

网上说应该用OracleDbType.Decimal,不知道怎么用?

大家实际没涉及到过这方面吗。
ZiRRen 2009-01-09
  • 打赏
  • 举报
回复
回复1楼的,不知道你实际看了没有,oracletype里面没有decimal这个类型是。

回复2,3楼的,长度写与不写,写多少都是一样的。
冷月孤峰 2009-01-09
  • 打赏
  • 举报
回复
直接:
new OracleParameter(":FUND", OracleType.Number)
wuyq11 2009-01-09
  • 打赏
  • 举报
回复
NUMBER是数字型,可以设置小数位如num(6,2),即整数位长度为6,小数位长度为2
VarChar型看内容长度

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧