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

asp.net(c#) 执行sql和参数赋值得有关问题

2012-02-03 
asp.net(c#) 执行sql和参数赋值得问题using(SqlConnectionconnnewSqlConnection(Resources.Resource.Conn

asp.net(c#) 执行sql和参数赋值得问题
using   (SqlConnection   conn   =   new   SqlConnection(Resources.Resource.ConnString))
                {
                        conn.Open();
                        string   typeid   =   "1 ";
                        using(SqlCommand   comm   =   new   SqlCommand   ( "select   *   from   vvmessage   where   typeid=@typeid   order   by   createtime   desc   ",conn))
                        {
                                comm.Parameters.AddWithValue( "@typeid ",   typeid);
                                using(SqlDataReader   dr   =   comm.ExecuteReader())
                                {
                                        Response   .Write   (dr.HasRows   );
                                }
                        }
                }
这段代码运行正常,

但放到   orcle数据库上,用以下代码,就报错了呢?

using   (OleDbConnection   conn   =   new   OleDbConnection(Resources.Resource.ConnectionString))
                {
                        conn.Open();
                        string   typeid   =   "1 ";
                        using   (OleDbCommand   comm   =   new   OleDbCommand   ( "select   *   from   vvmessage   where   typeid=@typeid   order   by   createtime   desc   ",   conn))
                        {
                                comm.Parameters.AddWithValue( "@typeid ",   typeid);
                                using   (OleDbDataReader   dr   =   comm.ExecuteReader())
                                {
                                        Response.Write(dr.HasRows);
                                }
                        }
                }

ORA-00936:   missing   expression  


说明:   执行当前   Web   请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。  

异常详细信息:   System.Data.OleDb.OleDbException:   ORA-00936:   missing   expression

源错误:  


行   22:                           {
行   23:                                   comm.Parameters.AddWithValue( "@typeid ",   typeid);
行   24:                                   using   (OleDbDataReader   dr   =   comm.ExecuteReader())
行   25:                                   {
行   26:                                           Response.Write(dr.HasRows);
 

源文件:   e:\Default2.aspx.cs         行:   24  



[解决办法]
oracle不能使用OleDbConnection 、OleDbCommand 、OleDbDataReader

======

可以,此时用 OleDb 去连 Oracle
[解决办法]
对于命令参数,

OleDb 不支持 【命名参数】,使用 ? (问号)作为占位符,
因为你要特别注意,假如多个参数,其进入 ParamerterCollection 的顺序很重要,与要 SQL/Store Procedure 中定义参数顺序一致

》》》

using (OleDbCommand comm = new OleDbCommand ( "select * from vvmessage where typeid=? order by createtime desc ", conn))
{
comm.Parameters.AddWithValue( " ", typeid);
using (OleDbDataReader dr = comm.ExecuteReader())
[解决办法]
Oracle SQL/PL 是支持【命名参数】的,语法是, : (冒号)紧跟参数名
因此假如你使用 OracleClient (microsoft data provider .net for oracle)
或者 ODP.NET (Oracle Data Provider,Oracle 官方提供)

那么 -》

// OracleClient
sing (OracleCommand comm = new OracleDbCommand ( "select * from vvmessage where typeid=:typeid order by createtime desc ", conn))
{
comm.Parameters.AddWithValue( ":typeid ", typeid);
// OR
// comm.Parameters.AddWithValue( "typeid ", typeid);
using (OracleDataReader dr = comm.ExecuteReader())


关于三个 Data Provider 的区别,当然主要再性能上,
用脚丫子都可以想到,整体上是

ODP.net > OralceClient > OleDb

热点排行