首页 > 新闻系统 > 编程天地 > 文章正文

ADO.NET参数详解

2008-04-16 10:09:40 来源:中国自学编程网 作者:佚名 点击:
这个问题以前总是遇到,但是每次都是找到解决方法就没有具体找原因。昨天再次遇到参数问题,才想着一定要搞清楚了。

    这个问题以前总是遇到,但是每次都是找到解决方法就没有具体找原因。昨天再次遇到参数问题,才想着一定要搞清楚了。
    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语句)。本来ADO.net提供了很好的类结构(DbConnection, DbCommand等以Db开头的类)来实现这种很重要的功能,可是这些原因使得我们还是要自己写不少代码。
下面是一段示例代码: 

//create proc TestParam
//@courseid varchar(50)
//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)
9 7 3 1 2 3 4 5 6 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203