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

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 订购的产品列表、顾客为每个订单支付的平均运费和订单数。
时间: 2024-10-15 12:58:51

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

SQL2008安装时,“provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (.Net SqlClient Data Provider)” 错误的解决方案

错误提示: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (.Net SqlClient Data Provider) 解决方案: 解决方法:开始->所有程序->Ms Sql Server->配置工具->sql server外围应用配置器->服

在与 SQL Serve2008r 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) j解决方案

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 今早开机发现,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: “在与 SQL Server 建立连接时出现与网络相关

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

立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Data.SqlClient.SqlException: 在建立与服务器的连接时出错.

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

出现这种情况的原因,很大一部分原因是因为数据库的连接字符串错误. 一:先说一下数据库连接字符串都有哪些格式: 1 Data server=./SQLEXPRESS;Initial Catalog=Northwind;User ID=**;Password=****** 2 Data Server=服务器名/SQLEXPRESS;Initial Catalog=Northwind;User ID=**;Password=****** 3 Data Server=localhost/SQLEXPRE

如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML

https://support.microsoft.com/zh-cn/kb/315968 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML Email Print 注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成.微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章.然而由机器翻译的文章并不总是完美的.它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误.虽然我们经常升级

ADO.NET入门教程(二)了解.NET数据提供程序

摘要 在上一篇文章<你必须知道的ADO.NET(一) 初识ADO.NET>中,我们知道ADO.NET的两大核心组件分别是Data Provider和DataSet.如果说DataSet是ADO.NET的心脏,那么Data Provider绝对是ADO.NET的左臂右膀.Data Provider提供了访问外部数据数据源的可能性,而且外部的数据源是多样的.本文将详细说明.NET数据提供程序的作用以及如何访问不同的数据源. 目录 什么是.NET数据提供程序? .NET数据提供程序的核心对象 其他重

未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法 错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

解决办法: 去http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe下载.然后安装就行了. 本错误是由于你使用了ACCESS2007版本建立的数据库,但服务器中没有相配合使用的程序,所以出错. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈

解决“无法连接到WMI提供程序,您没有权限或者该服务器无法访问。“

最近在学习PowerDesigner,在创建PDM模型的时候,遇到了一点儿小问题,本以为要重装SQLServer,百度了一下,问题就轻松解决了.问题的背景是这样的,在创建数据源的时候,总是测试连接不成功,我就想打开配置管理器查看一下是不是出了什么问题.结果,就出现了下面的弹窗:↓↓↓ 出错提示: 启动SQL Server 2005 配置管理器时,出现以下提示错误 无法连接到WMI提供程序.您没有权限或者该服务器无法访问...... Invalid class [0x80041010] 出错原因:

asp.net dbproviderfactory(提供程序工厂模型)

DbProviderFactories该类有几个静态方法 SQL Server提供程序工厂对象的方法 DbProviderFactory fact=DbProviderFactories.GetFactory("System.Data.Client"); GetFactory 方法接收一个字符串,该字符串代表提供程序的名称.这个名称位于machine.config文件中,他会对所有已注册的提供程序进行枚举,返回与该名称匹配的程序集和类名信息.工厂类并不会直接被实例化(即所谓的单例模式)