知识大全 ADO.NET参数详解

Posted

篇首语:炒沙作縻终不饱,缕冰文章费工巧。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ADO.NET参数详解相关的知识,希望对你有一定的参考价值。

ADO.NET参数详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  这个问题以前总是遇到 但是每次都是找到解决方法就没有具体找原因 昨天再次遇到参数问题 才想着一定要搞清楚了     ADO NET中不同数据提供者所用参数格式如下     Provider             Named/Positional            Parameter Marker    SqlClient            Named                       @parmname    OracleClient         Named                       parmname (or parmname)    OleDb                Positional                  ?    Odbc                 Positional                   ?

  在DbCommand CommandType=CommandType Text时 DbParameter就要符合上述要求 如SqlParameter则要使用参数名来决定参数值 而oledb则是根据参数顺序来决定参数值 但是当DbCommand CommandType=CommandType StoreProcedure时 则可以采用采用占位符或名字来确定参数值     这种不统一使得要写出跨越各种数据提供者的程序变得复杂了 同时要实现统一的数据层当然还要考虑不同数据库的sql语句区别(所以要尽量采用标准的sql语句) 本来提供了很好的类结构(DbConnection DbCommand等以Db开头的类)来实现这种很重要的功能 可是这些原因使得我们还是要自己写不少代码     下面是一段示例代码

  //create proc TestParam    //@courseid varchar( )    //as    //select * from course where courseid=@courseid

  using System;    using System Collections Generic;    using System Data Common;    using System Data OleDb;    using System Data SqlClient;    using System Text;

  namespace ADOParameterTest            class Program                    enum ConnectionType : byte Sql Ole ;

  static string sqlConnectionString = Data Source=CTEC LLY;Initial Catalog=examdb;Integrated Security=True ;        static string oleConnectionString = Provider=sqloledb;Data Source=CTEC LLY;Initial Catalog=examdb;User Id=sa;Password=sa ;

  static DbConnection GetConnection(ConnectionType ct)             if (ct == ConnectionType Sql)                                        return new SqlConnection(sqlConnectionString);                        else                            return new OleDbConnection(oleConnectionString);                   

  static void TestOleCommandText()                    Console WriteLine( TestOleCommandText );            using(DbConnection con = GetConnection(ConnectionType Ole))                            con Open();                DbCommand cmd = con CreateCommand();                //cmd CommandText = declare @courseid as varchar( ); set @courseid= ;select * from course where courseid=@courseid ;                cmd CommandText = select * from course where courseid=? ;                //odbc&oledb只能是?做占位符 这时跟参数名无关跟参数顺序是相关的                DbParameter p = cmd CreateParameter();                p ParameterName = courseid ;                p Value = ;                cmd Parameters Add(p);                //下面被注释的参数设置方式也是对的 可以注释上面四行而采用下面的语句                //记住参数名是没有意义的 顺序决定参数                //cmd Parameters Add(new OleDbParameter( @courseid ));                ShowResult(cmd ExecuteReader());                   

  static void TestOleStoredProcedure()                             Console WriteLine( TestOleStoredProcedure );            using (DbConnection con = GetConnection(ConnectionType Ole))                            con Open();                DbCommand cmd = con CreateCommand();                cmd CommandType = System Data CommandType StoredProcedure;                cmd CommandText = TestParam ;                Console WriteLine( 用@param做占位符 );                //odbc&oledb只能是?做占位符 这时跟参数名无关跟参数顺序是相关的                DbParameter p = cmd CreateParameter();                p ParameterName = @courseid ;                p Value = ;                cmd Parameters Add(p);                //下面被注释的参数设置方式也是对的 可以注释上面四行而采用下面的语句                //记住参数名是没有意义的 顺序决定参数                //cmd Parameters Add(new OleDbParameter( @courseid ));                ShowResult(cmd ExecuteReader());

  Console WriteLine( 用?做占位符 );                p ParameterName = ;                ShowResult(cmd ExecuteReader());

         

        static void TestSqlCommandText()                    Console WriteLine( TestSqlCommandText );            using (DbConnection con = GetConnection(ConnectionType Sql))                                    con Open();                DbCommand cmd = con CreateCommand();                //sql只能是@param做占位符 跟oledb相反 跟参数名有关跟参数顺序无关                //oracle只能用:param做占位符 跟参数名有关跟参数顺序无关                cmd CommandText = select * from course where courseid=@courseid ;                DbParameter p = cmd CreateParameter();                p ParameterName = @courseid ;                p Value = ;                cmd Parameters Add(p);                //下面被注释的参数设置方式也是对的 可以注释上面四行而采用下面的语句                //记住只有参数名有意义 顺序无关                //cmd Parameters Add(new OleDbParameter( @courseid ));                ShowResult(cmd ExecuteReader());                   

  static void TestSqlStoredProcedure()                    Console WriteLine( TestSqlStoredProcedure );            using (DbConnection con = GetConnection(ConnectionType Sql))                            con Open();                DbCommand cmd = con CreateCommand();                //sql只能是@param做占位符 跟oledb相反 跟参数名有关跟参数顺序无关                //oracle只能用:param做占位符 跟参数名有关跟参数顺序无关                cmd CommandType = System Data CommandType StoredProcedure;                cmd CommandText = TestParam ;

  Console WriteLine( 用@param做占位符 );                                         DbParameter p = cmd CreateParameter();                p ParameterName = @courseid ;                p Value = ;                cmd Parameters Add(p);                //下面被注释的参数设置方式也是对的 可以注释上面四行而采用下面的语句                //记住只有参数名有意义 顺序无关                //cmd Parameters Add(new OleDbParameter( @courseid ));                ShowResult(cmd ExecuteReader());

  Console WriteLine( 用?做占位符 );                p ParameterName = ;                ShowResult(cmd ExecuteReader());                   

  static void ShowResult(DbDataReader reader)                    int count = reader FieldCount;            while(reader Read())                            Console WriteLine( );                for(int i= ; i<count; i++)                                    Console WriteLine(string Format( Filed[ ]= i reader GetValue(i) ToString()));                                        reader Close();            Console WriteLine();       

  static void Main(string[] args)                    try                            TestOleCommandText();

cha138/Article/program/net/201311/12944

相关参考

知识大全 大致了解ADO.NET参数问题

大致了解ADO.NET参数问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一段时间以来存储过

知识大全 ADO.NET和ADO的比较

ADO.NET和ADO的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 处理ADO与ADO.NET对比介绍

处理ADO与ADO.NET对比介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ADONET统

知识大全 在 ADO 和 ADO.NET 中管理离线数据

在ADO和ADO.NET中管理离线数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  您可以使用

知识大全 ADO.Net与ADO在数据内存中的差异讨论

ADO.Net与ADO在数据内存中的差异讨论  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据

知识大全 Asp.Net中创建和使用Ado.net

Asp.Net中创建和使用Ado.net  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 ADO.NET中的.NET数据提供者

ADO.NET中的.NET数据提供者  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ADONET

知识大全 ASP.NET项目开发指南:ADO.NET概述

ASP.NET项目开发指南:ADO.NET概述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 ASP.NET项目开发指南:ADO.NET结构

ASP.NET项目开发指南:ADO.NET结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 ADO.NET入门(4)

ADO.NET入门(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  转换现有代码  &nbs