知识大全 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参数问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一段时间以来存储过
ADO.NET和ADO的比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
处理ADO与ADO.NET对比介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ADONET统
在ADO和ADO.NET中管理离线数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 您可以使用
ADO.Net与ADO在数据内存中的差异讨论 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数据
Asp.Net中创建和使用Ado.net 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ADO.NET中的.NET数据提供者 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ADONET
ASP.NET项目开发指南:ADO.NET概述 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
ASP.NET项目开发指南:ADO.NET结构 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
ADO.NET入门(4) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 转换现有代码 &nbs