使用 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"(过程调用)主题。
调用语法示例
- 这是罗斯文示例数据库中一个要求单个输入参数的实际存储过程的调用语法示例:
{CALL CustOrderHist (?)}
- 这是一个要求单输入参数并返回一个输出参数和一个返回值的存储过程的调用语法示例:第一个占位符代表返回值:
{? = CALL Procedure1 (?, ?)
- ODBC .NET 托管提供程序,如 OLE DB 提供程序,按照位置顺序(从 0 开始)而不是按名称处理参数。
测试项目 - 单输入参数
- 从以下 Microsoft Web 站点下载并安装 ODBC.NET 托管提供程序(如果尚未进行):
- 启动 Visual Studio .NET,然后新建一个 Visual C# .NET Windows 应用程序(名称自定)。
- 从项目菜单中,单击添加引用,然后双击 Microsoft.Data.ODBC.dll 将其添加到所选项目列表。关闭引用对话框。
- 将下面的语句添加到代码窗口的顶部:
using System.Data;
using Microsoft.Data.Odbc; - 将 Button 控件从工具箱拖到默认窗体中。
- 双击插入的按钮切换到该按钮的 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());
} - 运行该项目。此代码调用"CustOrderHist"存储过程,传递 CustomerID 作为单输入参数并返回一个结果集。在输出窗口中,您应该看到罗斯文顾客 ALFKI 订购的产品列表。
备注:按 CTRL+ALT+O 组合键可以打开输出窗口。
测试项目 - 多参数类型
- 使用 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 - 重复上述步骤 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());
} - 运行该项目。此代码调用在上述步骤 1 中创建的"usp_TestParameters"存储过程,传递 CustomerID 作为单输入参数,并返回一个结果集和一个输出参数作为返回值。在输出窗口,您应看到罗斯文顾客 ALFKI 订购的产品列表、顾客为每个订单支付的平均运费和订单数。
使用 ODBC .NET 提供程序和 Visual C# .NET 执行 SQL 参数化存储过程的更多相关文章
- 远程sql数据库连接不上,provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接 错误解决
错误信息: “ 标题: 连接到服务器------------------------------ 无法连接到 192.168.1.20. ------------------------------其 ...
- SQL2008安装时,“provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (.Net SqlClient Data Provider)” 错误的解决方案
错误提示: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provide ...
- "provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接"错误的解决方法
这个错误主要有以下几个原因造成: 1. 错误的连接字符串:例如数据源的实例名称“\"错误写成"/"了 2.Named Pipes(NP)没有启动 其他原因,详见:http ...
- 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML
https://support.microsoft.com/zh-cn/kb/315968 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML Email Prin ...
- ADO.NET入门教程(二)了解.NET数据提供程序
出处:http://www.cnblogs.com/liuhaorain/archive/2012/02/11/2346312.html 1. 什么是.NET数据提供程序? .NET Framewor ...
- SimpleMembership,成员资格提供程序、 通用的提供者和新的 ASP.NET 4.5 Web 窗体和 ASP.NET MVC 4 模板
ASP.NET MVC 4 互联网模板中添加一些新的. 非常有用的功能,构建 SimpleMembership.这些更改将添加一些很有特色,像很多更简单. 可扩展会员 API 和 OAuth 的支持. ...
- 记VS2008初始化Microsoft Visual Sourcesafe源码管理提供程序时失败
之前vs2008开发一直都好好,不知道为什么如今的vs2008打开和关闭都老是弹出这这个初始化Microsoft Visual Sourcesafe源码管理提供程序时失败的错误 解决方法非常easy: ...
- 未在本地计算机上注册"microsoft.ACE.oledb.12.0"提供程序解决办法
错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序. 解决办法: 去http://download.microsoft.com/download/7/0/3/7 ...
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
笔记本装的是windows 7旗舰版64位系统,使用的是MS Office 2007(Microsoft.ACE.OLEDB.12.0,32位程序),开发用的是Visual Studio 2010,我 ...
随机推荐
- 6.3.28微信需群主确认才可进群&发GIF动图功能内测开始了
昨天下午有网友收到微信6.3.28新版内测邀请,不过这个内部体验目前貌似只对安卓手机开放,苹果的IOS系统还不支持,会提示“你当前使用的是非安卓设备,不建议下载安卓体验包,但你仍可邀请朋友尝鲜”.最新 ...
- Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载
[Postman for Chrome 离线下载] Postman-REST-Client离线安装包,可直接在Chrome浏览器本地安装使用,可模拟各种http请求,Restful Api测试, CS ...
- 请求WebMethod, Ajax 处理更加专注
在WebForm下 开发ajax程序,需要借助于一般处理程序(*.ashx)或web服务(*.asmx),并且每一个ajax请求,都要建一个这样的文件,如此一来,如 果在一个项目中ajax程序多了,势 ...
- Javascript高级程序设计——基本类型和引用类型的值
ECMAScript中的变量有两种不同的数据类型的值: 基本类型:基本类型的值是简单的数据段.包括:Undefined.Null.Number.Boolean.String五种 引用类型:引用类型的值 ...
- 简述JavaScript函数节流
为什么要用函数节流 浏览器中某些计算和处理要比其他的昂贵很多.例如,DOM 操作比起非 DOM 交互需要更多的内存和 CPU 时间.连续尝试进行过多的 DOM 相关操作可能会导致浏览器挂起,有时候甚至 ...
- 在 2017 年将会更加流行的 6 个 Web 开发趋势
2016即将过去,2017就要来临. 前阵子看到很多对2016前端领域的总结,也是有人欢喜有人忧啊. 转发了这一篇2017web的发展趋势.那么到底会是怎么样的一个发展趋势的,只好拭目以待了. 201 ...
- UIView动画效果
做出UI界面,实现程序功能,是重中之重,但是通过动画提升使用体验,一般人应该不会拒绝吧. 那么问题又来了,怎么做? 一: 稳扎稳打: 一步一步来吧,毕竟,心急吃不了热豆腐. 1.开启一个动画 2,设置 ...
- &,引用复制@,忽略错误提示
function &chhua() { static $b="www.jb51.net";//申明一个静态变量 $b=$b."WEB开发"; echo ...
- hustoj1353 节点选择 树形dp
1353: 结点选择 时间限制: 1 Sec 内存限制: 128 MB提交: 6 解决: 2[提交][状态][讨论版] 题目描述 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值. ...
- hibernate日常BUG总结
在使用hibernate自动生产表的时候失败, 是配置文件我是从别地方拷贝过来忘记更改,所以报了这个错误. 重新命名了生成表的名称,问题解决! 问题很明显,自动增长的主键应该使用整型. 这里写的是St ...