http://support2.microsoft.com/kb/310130/zh-cn

此分步指导文章描述如何使用 ODBC .NET 托管提供程序和 Visual C# .Net 调用参数化 SQL Server 存储过程。

尽管使用 ODBC .NET 提供程序执行参数化存储过程与使用 SQL 或 OLE DB 提供程序执行同一存储过程差别不大,但一个重要的差别是:存储过程必须使用 ODBC CALL 语法进行调用,而不能使用存储过程的名称。有关此 CALL 语法的其他信息,请参见 MSDN 库中 ODBC Programmer's Reference(ODBC 程序员参考)中的"Procedure Calls"(过程调用)主题。

调用语法示例

  1. 这是罗斯文示例数据库中一个要求单个输入参数的实际存储过程的调用语法示例:

    {CALL CustOrderHist (?)}

  2. 这是一个要求单输入参数并返回一个输出参数和一个返回值的存储过程的调用语法示例:第一个占位符代表返回值:
    {? = CALL Procedure1 (?, ?)

  3. ODBC .NET 托管提供程序,如 OLE DB 提供程序,按照位置顺序(从 0 开始)而不是按名称处理参数。

测试项目 - 单输入参数

  1. 从以下 Microsoft Web 站点下载并安装 ODBC.NET 托管提供程序(如果尚未进行):

    http://www.microsoft.com/data
  2. 启动 Visual Studio .NET,然后新建一个 Visual C# .NET Windows 应用程序(名称自定)。
  3. 项目菜单中,单击添加引用,然后双击 Microsoft.Data.ODBC.dll 将其添加到所选项目列表。关闭引用对话框。
  4. 将下面的语句添加到代码窗口的顶部:
    using System.Data;
    using Microsoft.Data.Odbc;

  5.  Button 控件从工具箱拖到默认窗体中。
  6. 双击插入的按钮切换到该按钮的 Click 事件的代码窗口。将以下代码输入或粘贴到 Click 事件过程,根据需要修改 SQL Server 连接字符串:
    OdbcConnection cn;
    OdbcCommand cmd;
    OdbcParameter prm;
    OdbcDataReader dr;try{
    //Change the connection string to use your SQL Server.
    cn = new OdbcConnection("Driver={SQL Server};Server=servername;Database=Northwind;Trusted_Connection=Yes");//Use ODBC call syntax.
    cmd = new OdbcCommand("{call CustOrderHist (?)}", cn);prm = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5);
    prm.Value = "ALFKI";cn.Open();dr = cmd.ExecuteReader();//List each product.
    while (dr.Read())Console.WriteLine(dr.GetString(0));//Clean up.
    dr.Close();
    cn.Close();
    }
    catch (OdbcException o) {
    MessageBox.Show(o.Message.ToString());
    }

  7. 运行该项目。此代码调用"CustOrderHist"存储过程,传递 CustomerID 作为单输入参数并返回一个结果集。在输出窗口中,您应该看到罗斯文顾客 ALFKI 订购的产品列表。

    备注:按 CTRL+ALT+O 组合键可以打开输出窗口。

测试项目 - 多参数类型

  1. 使用 Query Analyzer,在罗斯文示例数据库中创建以下存储过程:此存储过程接受将 CustomerID 作为输入参数并返回一个顾客订单列表,返回顾客支付的每个订单的平均运费作为输出参数,返回顾客的订单数作为返回值。

    CREATE PROCEDURE usp_TestParameters
    @CustID CHAR(5),
    @AvgFreight MONEY OUTPUT
    AS
    SELECT @AvgFreight = AVG(Freight) FROM Orders WHERE CustomerID = @CustID
    SELECT * FROM Orders WHERE CustomerID = @CustID
    RETURN @@ROWCOUNT

  2. 重复上述步骤 1 到 6,将按钮的 Click 事件过程替换为以下代码:
    OdbcConnection cn;try{
    cn = new OdbcConnection("Driver={SQL Server};Server=servername;Database=Northwind;Trusted_Connection=Yes");OdbcCommand cmd = new OdbcCommand("{? = call usp_TestParameters (?, ?)}", cn);OdbcParameter prm = cmd.Parameters.Add("@RETURN_VALUE", OdbcType.Int);
    prm.Direction = ParameterDirection.ReturnValue;prm = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5);
    prm.Value = "ALFKI";prm = cmd.Parameters.Add("@AvgFreight", OdbcType.Double);
    prm.Direction = ParameterDirection.Output;cn.Open();
    OdbcDataReader dr = cmd.ExecuteReader();while (dr.Read())
    Console.WriteLine(dr.GetString(0));dr.Close();
    cn.Close();Console.WriteLine("Average Freight (output param):{0}", cmd.Parameters[2].Value);
    Console.WriteLine("Order Count (return value):{0}", cmd.Parameters[0].Value);}catch (OdbcException o) {
    MessageBox.Show(o.Message.ToString());
    }

  3. 运行该项目。此代码调用在上述步骤 1 中创建的"usp_TestParameters"存储过程,传递 CustomerID 作为单输入参数,并返回一个结果集和一个输出参数作为返回值。在输出窗口,您应看到罗斯文顾客 ALFKI 订购的产品列表、顾客为每个订单支付的平均运费和订单数。

转载于:https://www.cnblogs.com/tylertang/p/4039877.html

使用 ODBC .NET 提供程序和 Visual C# .NET 执行 SQL 参数化存储过程相关推荐

  1. SQL数据库隐藏服务器后需要在连接字符串增加端口号,(provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)]...

    1.将SQL数据库服务设置为隐藏,端口默认改为2433 2.原有的ASP.NET程序访问数据库报错: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器. ...

  2. 在与 SQL Server 2014建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器 provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Ser

    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管 ...

  3. provider: 命名管道提供程序, error:provider: 命名管道提供程序, error:40 - 无法打开到 SQL Server 的连接

    在链接数据库的时候,提示一个错误!错误信息如下! 在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败. ...

  4. provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接错误的解决方法...

    这个错误主要有以下几个原因造成: 1. 错误的连接字符串:例如数据源的实例名称"\"错误写成"/"了 2.Named Pipes(NP)没有启动 其他原因,详见 ...

  5. 剖析 .NET 托管提供程序

    剖析 .NET 托管提供程序 发布日期: 4/1/2004 | 更新日期: 4/1/2004 Dino Esposito Wintellect 2001 年 10 月 9 日 与成熟的 OLE DB ...

  6. .NET数据提供程序

    ADO.NET为底层数据库提供了不同的连接对象的特定实现.换言之,为了连接到微软SQL Server数据库,要通过特定的名为SqlConnection的类.实际上,所有SQL Server特有的类都位 ...

  7. [ODBC Driver 18 for SQL Server]SSL 提供程序: 证书链是由不受信任的颁发机构颁发的

    [ODBC Driver 18 for SQL Server]SSL 提供程序: 证书链是由不受信任的颁发机构颁发的 方法两个: 1)odbc数据源界面:信任服务器证书 2)连接字符串加入参数:Tru ...

  8. 初始化 Microsoft Visual SourceSafe 源代码管理提供程序时失败问题处理

    在使用VS2008和Microsoft.Visual.SourceSafe进行团队软件开发时,用VS2008打开项目时出现了"初始化 Microsoft Visual SourceSafe ...

  9. IE 8 中自定义自己的 Search Provider (搜索提供程序)

    介绍 本文会为大家展示如果使用VS 2008 来创建基于IE8 的搜索提供程序, 以及在其中添加文本搜索建议和带有图片的搜索建议. 目的 学习如何使用VS 2008 来制作自己的搜索提供程序 步骤1 ...

最新文章

  1. 日积月累真的很可怕,记住这些编程单词,两周学会敲代码
  2. LeetCode: 58. Length of Last Word
  3. 2、.net NVelocity中原生javascript ajax封装使用
  4. [Xcode 实际操作]七、文件与数据-(2)创建文件夹
  5. python 内部函数传参_python中函数传参详解
  6. BZOJ1439 : YY的问题
  7. 【转】医学影像处理相关知识整理(一)
  8. 深度学习(六十八)darknet使用
  9. Vue报错:Uncaught TypeError: Cannot assign to read only property ‘exports‘ of object 的解决方法
  10. python datetime需要安装_【python从入门到入土】之第一行代码
  11. 【声源定位】基于matlab广义互相关声源定位【含Matlab源码 548期】
  12. 风之大陆互通服务器账号,风之大陆有几个服务器?服务器互通吗?
  13. 北京飞马贸易借沟通CTBS实现总部与分公司同步做帐
  14. typora快捷键大全
  15. 轮子哥:回顾我走过的编程之路
  16. php中句柄是什么意思,“句柄”到底是什么意思啊
  17. 有利于排名的网页标题和描述创作
  18. 如何用PDF编辑器将PDF文件拆分
  19. 机器学习词汇翻译解释(2)
  20. 中国国有资本投资运营公司“十四五”投资规划及发展动向展望报告2022-2028年

热门文章

  1. docker学习笔记18:Dockerfile 指令 VOLUME 介绍
  2. 宁波Uber优步司机奖励政策(12月21日到12月27日)
  3. liunx下NetworkManager导致网卡不能启动
  4. c# 扩展方法奇思妙用变态篇一:由 Fibonacci 数列引出 “委托扩展” 及 “递推递归委托”...
  5. Js中Proxy对象
  6. linux wget 命令_我如何使用wget Linux命令恢复丢失的图像
  7. 构造函数和复制函数java_什么是Java构造函数?
  8. ka3525_如何使用KA Lite投放教育内容
  9. raspberry pi_Raspberry Pi项目旨在调节室温并改善睡眠
  10. LeetCode 315. 计算右侧小于当前元素的个数(Count of Smaller Numbers After Self)