首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

问一个Oracle和C#的数据库访问中,Sql参数的有关问题

2012-04-20 
问一个Oracle和C#的数据库访问中,Sql参数的问题是这样的,很久没用Oracle了最近一个项目中需要用到Oracle,

问一个Oracle和C#的数据库访问中,Sql参数的问题
是这样的,很久没用Oracle了
最近一个项目中需要用到Oracle,结果出现了很奇怪的问题,出示事例代码:
                        OracleConnection   con   =   ConnectionInfo.GetConnection();
                        OracleCommand   cmd   =   con.CreateCommand();
                        cmd.CommandText   =   "UPDATE   T_GROUP   SET   NAME   =   :NAME,   VALUE   =   :VALUE   WHERE   ID   =   :ID ";
                        cmd.Parameters.Add( ":ID ",   OracleDbType.Varchar2).Value   =   "AE279B5E3C504F5BA91D139AAE3B1864 ";
                        cmd.Parameters.Add( ":NAME ",   OracleDbType.NVarchar2).Value   =   "美女与野兽12 ";
                        cmd.Parameters.Add( ":VALUE ",   OracleDbType.Int16).Value   =   2;
                        try
                        {
                                con.Open();
                                int   r   =   cmd.ExecuteNonQuery();
                                Console.WriteLine(r);
                        }
                        catch   (OracleException   err)
                        {
                                throw   err;
                        }
                        finally
                        {
                                if   (con.State   ==   System.Data.ConnectionState.Open)
                                {
                                        con.Close();
                                }
                        }
--数据库
create   table   T_GROUP
(
    id         VARCHAR2(32)   default   SYS_GUID()   not   null,
    name     NVARCHAR2(20)   not   null,
    value   NUMBER(4)   default   -1   not   null
)
就这么一个简单的表
但是执行这个程序,总是报ORA-01722:   无效数字


如果不加WHERE条件   或者WHERE   ID   IS   NOT   NULL   则可以通过
如果是WHERE条件不改变   去掉SQL中的VALUE列,也可以通过
不知道各位有没有遇到这种情况

[解决办法]
ID设置是number啊,看看这个呢,我在家没办法调试,呵呵
参考:http://docs.oracle.com/cd/B19306_01/win.102/b14307/OracleDbTypeEnumerationType.htm

Decimal Oracle NUMBER type 

貌似应该用dbtype应该用decimal
[解决办法]
因为你用的是Oracle公司提供的dll,而不是微软提供的,因此有个属性必须设置

C# code
OracleCommand   cmd   =   con.CreateCommand(); cmd.BindByName = true; 

热点排行