将存储过程用于命令
来源:互联网 发布:守望先锋公开队友数据 编辑:程序博客网 时间:2024/06/08 14:34
存储过程提供了数据驱动应用程序中的许多优点。利用存储过程,数据库操作可以封装在单个命令中,为获取最佳性能而进行优化并通过附加的安全性得到增强。虽然可以通过以 SQL 语句的形式传递参数自变量之前的存储过程名称来调用存储过程,但如果使用 ADO.NET Command 对象的 Parameters 集合,则可以显式地定义存储过程参数并访问输出参数和返回值。
若要调用存储过程,请将 Command 对象的 CommandType 设置为 StoredProcedure。CommandType 一旦设置为 StoredProcedure,就可以使用 Parameters 集合来定义参数,如以下示例所示。
注意 OdbcCommand 要求您在调用存储过程时提供完整的 ODBC CALL 语法。
SqlClient
[C#]SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");SqlCommand salesCMD = new SqlCommand("SalesByCategory", nwindConn);salesCMD.CommandType = CommandType.StoredProcedure;SqlParameter myParm = salesCMD.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15);myParm.Value = "Beverages";nwindConn.Open();SqlDataReader myReader = salesCMD.ExecuteReader();Console.WriteLine("{0}, {1}", myReader.GetName(0), myReader.GetName(1));while (myReader.Read()){ Console.WriteLine("{0}, ${1}", myReader.GetString(0), myReader.GetDecimal(1));}myReader.Close();nwindConn.Close();将参数用于 SqlCommand
在将参数用于 SqlCommand 时,添加到 Parameters 集合的参数的名称必须与存储过程中参数标记的名称相匹配。SQL Server .NET Framework 数据提供程序将存储过程中的参数视为命名参数并搜索匹配的参数标记。
SQL Server .NET Framework 数据提供程序不支持在向 SQL 语句或存储过程传递参数时使用问号 (?) 占位符。在这种情况下,必须使用命名参数,如以下示例所示。
SELECT * FROM Customers WHERE CustomerID = @CustomerID将参数用于 OleDbCommand 或 OdbcCommand
将参数用于 OleDbCommand 或 OdbcCommand 时,向 Parameters 集合中添加参数的顺序必须与存储过程中所定义的参数顺序相匹配。OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序将存储过程中的参数视为占位符,并且将按顺序使用这些参数值。另外,返回值参数必须是添加到 Parameters 集合中的第一批参数。
OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序不支持用于将参数传递到 SQL 语句或存储过程的命名参数。在此情况下,必须使用问号 (?) 占位符,如以下示例所示。
SELECT * FROM Customers WHERE CustomerID = ?因此,向 Parameters 集合添加 Parameter 对象的顺序必须直接对应于该参数的问号占位符的位置。
导出参数信息
参数也可以使用 CommandBuilder 类从存储过程导出。SqlCommandBuilder 和 OleDbCommandBuilder 类都提供了静态方法 DeriveParameters,该静态方法将自动使用存储过程中的参数信息填充 Command 对象的 Parameters 集合。请注意,DeriveParameters 将改写 Command 的任何现有参数信息。
导出参数信息时需要经历一个到数据源的附加行程,以获取参数信息。如果参数信息在设计时是已知的,则可以通过显式设置参数来提高应用程序的性能。
以下代码示例显示如何使用 CommandBuilder.DeriveParameters 来填充 Command 对象的 Parameters 集合。
[C#]SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");SqlCommand salesCMD = new SqlCommand("Sales By Year", nwindConn);salesCMD.CommandType = CommandType.StoredProcedure;nwindConn.Open();SqlCommandBuilder.DeriveParameters(salesCMD);nwindConn.Close();
- 将存储过程用于命令
- 将存储过程用于命令
- 将 SQL Server 存储过程用于数据访问
- 用于分页的存储过程
- 用于分页的存储过程
- sp_decrypt用于存储过程解密
- 用于重建存储过程StoreProcedure
- 用于DataGrid MoveUp,MoveDown的存储过程
- 用于DataGrid MoveUp,MoveDown的存储过程
- 用于关闭数据库链接的存储过程
- 用于处理树的一个存储过程
- 用于分页的MySQL存储过程
- 用于数据库加密的存储过程
- 数据库存储过程用于测试性能
- mysql存储过程和命令
- DB2存储过程命令解析
- 用于执行(计算) "字符串表达式" 的 T-SQL 存储过程
- 用于在TComboBox中存储编号的小过程
- 你会用Google?估计你会用一半就不错了
- 你欠缺什么,你的真爱就是什么
- 转载:全国各大城市经纬度
- Trac 工具彻底了解
- mysql常见操作
- 将存储过程用于命令
- SVN
- 牛人与非牛人的对话(转载)
- 用DEV-C++编译BOOST
- 绝对想不到:13个人体密码大解析!
- [转]C++ 库大汇
- 软件职业人生
- 不要一辈子靠技术生存 [转贴]
- 奇怪的 .CRT警告