看http://zxianf.blog.163.com/blog/static/301207012009114104124969/中片关于Sql Server中存储过程output和return值的区别

在里面有讲解,我在自己本机中测试的结果如下,

1:ReturnValue只能返回0,1,-1这样的数据,局限性很大 ,而在存储过程中用OutPut参数,可以返回各种类型的数据,比较灵活方便。

ReturnValue   是用来返回错误码的,output是指存储过程传出参数       例如    :

@Flag   varchar(20)   output   
View Code

 1 sql存储过程: 2 create proc Test 3 @B varchar(50) output, 4 @C varchar(50) 5 as 6 begin 7  declare @A int 8  set @B=@C+'Return' 9  set @A=100010  return @A11 end



c#程序代码:       
View Code

 1  System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("server=(local);uid=sa;pwd=sa;database=ServerUForVhost1"); 2         System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand("Test", conn); 3         comm.CommandType = System.Data.CommandType.StoredProcedure; 4         //调用sqlhelper时这样写,单独不行:comm.Parameters.Add(不能addsqlparameter[]) 5 //SqlParameter[] parameter ={ 6 //    new System.Data.SqlClient.SqlParameter("@A",System.Data.SqlDbType.Int,4), 7 //    new System.Data.SqlClient.SqlParameter("@B",System.Data.SqlDbType.VarChar,50), 8 //    new System.Data.SqlClient.SqlParameter("@C",System.Data.SqlDbType.VarChar,50) 9 //    };10 //parameter[2].Direction = ParameterDirection.Input;11 //      parameter[0].Direction = ParameterDirection.ReturnValue;12 //      parameter[1].Direction = ParameterDirection.Output;13           comm.Parameters.Add(new System.Data.SqlClient.SqlParameter("@A", System.Data.SqlDbType.Int, 4));14           comm.Parameters["@A"].Direction = ParameterDirection.ReturnValue;15           comm.Parameters.Add(new System.Data.SqlClient.SqlParameter("@B", System.Data.SqlDbType.VarChar, 50));16           comm.Parameters["@B"].Direction = ParameterDirection.Output;17           comm.Parameters.Add(new System.Data.SqlClient.SqlParameter("@C", System.Data.SqlDbType.VarChar, 50));18           comm.Parameters["@C"].Value = "insertmsg";19           conn.Open();20           int i = comm.ExecuteNonQuery();21           string result1 = comm.Parameters["@A"].Value.ToString();22           string result2 = comm.Parameters["@B"].Value.ToString();23           conn.Close();

结果为: result1=1000;result2=insertmsgResult
另外还要主要output中如果返回字符串时候,一定需要指定字符串的长度,否则返回的时候就只返回首字符,写成下面的形式
或者指定其长度
new SqlParameter("@TableName",SqlDbType.VarChar,500,ParameterDirection.Output,false,0,0,"TableName",DataRowVersion.Default,pTable),
其中测试的语句如下

View Code

 1 public void TestOutput(out  string pTable, out int pPageIndex, out int pTotalPage) 2         { 3             pTable = string.Empty; 4             pPageIndex = 0; 5             pTotalPage = 0; 6             string procedureName = "up_PageOutput"; 7             System.Collections.Hashtable result = new System.Collections.Hashtable(); 8             // 9             try10             {11                 using (SqlConnection connection = new SqlConnection(SqlHelper.SqlHelper.ConnectionStringLocalTransaction))12                 {13                     connection.Open();14                     if (connection.State != ConnectionState.Open)15                     {16                         connection.Open();17                     }18                     using (SqlCommand cmd = new SqlCommand(procedureName, connection))19                     {20                         // 注意这里要把CommandType设为StoredProcedure解析为存储过程21 // 也可默认为Text 以SQL语句模式解析,这样调用存储过程就要用SQL语句 EXEC <存储过程名> <参数...> 写 SQL 语句调用22                         cmd.CommandType = CommandType.StoredProcedure;23                         cmd.CommandTimeout = 60;24                         cmd.Parameters.AddRange(new SqlParameter[] 25                         { 26                         new SqlParameter("@TableName",SqlDbType.VarChar,500,ParameterDirection.Output,false,0,0,"TableName",DataRowVersion.Default,pTable),27                         //new SqlParameter("@pageIndex", SqlDbType.Int,pPageIndex), 28                         new SqlParameter("@pageIndex",pPageIndex),29                         //new SqlParameter("@TotalPage", SqlDbType.Int,pTotalRecord)30                         new SqlParameter("@TotalPage",pTotalPage)31                         });32                         cmd.Parameters["@TableName"].Direction = ParameterDirection.Output;33                         cmd.Parameters["@pageIndex"].Direction = ParameterDirection.Output;34                         cmd.Parameters["@TotalPage"].Direction = ParameterDirection.Output;35                         cmd.Parameters.Add(new SqlParameter("@retrunValue", SqlDbType.VarChar, 500));36                         cmd.Parameters["@retrunValue"].Direction = ParameterDirection.ReturnValue; 37                         object hang = cmd.ExecuteNonQuery();38                         foreach (SqlParameter param in cmd.Parameters)39                         {40                             // 这里把输出参数放到一个 HashTable 里面,方便取出41                             if (param.Direction == ParameterDirection.Output || param.Direction == ParameterDirection.InputOutput || param.Direction == ParameterDirection.ReturnValue)42                             {43                                 result.Add(param.ParameterName, param.Value);44                             }45                         }46                         //pTotalRecord = SqlHelper.SqlHelper.ExecuteNonQuery(SqlHelper.SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, procedureName, param);47                         object retValue1 = cmd.Parameters["@TotalPage"].Value;48                         //pTotalPage = Convert.ToInt32(retValue1);49                         object retValue2 = cmd.Parameters["@pageIndex"].Value;50                         object retValue3 = cmd.Parameters["@TableName"].Value;51                         object retValue4 = cmd.Parameters["@retrunValue"].Value;52                     53                     }54 55                     connection.Close();56                 }57             }58             catch (Exception)59             {60 61             }62         }

其中几个关键主要设置参数的方式和和取得返回值的方式。

转载于:https://www.cnblogs.com/huangyuanfengxue/archive/2012/02/29/2373339.html

Sql Server 中存储过程的output return的区别相关推荐

  1. SQL Server中Text和varchar(max)数据类型区别

    SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与var ...

  2. SQL Server中临时表与表变量的区别

    我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候 ...

  3. SQL Server--[转]SQL Server中临时表与表变量的区别

    http://blog.csdn.net/skyremember/archive/2009/03/05/3960687.aspx 我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临 ...

  4. sql server中存储过程提示错误

    1.今天写存储过程是运行时总是提示如下错误: Subquery returned more than 1 value. This is not permitted when the subquery ...

  5. sql server序列_SQL Server中身份和序列之间的区别

    sql server序列 In SQL Server, both the SEQUENCE object and IDENTITY property are used to generate a se ...

  6. 了解SQL Server中的GUID数据类型

    什么是GUID? (What is a GUID?) GUID is a 16 byte binary SQL Server data type that is globally unique acr ...

  7. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程(Transact-SQL)方法总结...

    作者:liigo 日期:2010/8/25 Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接 ...

  8. SQL Server中的部分存储过程

    介绍 (Introduction) SQL is an old language - almost 50 years! The first commercially-available version ...

  9. SQL Server中的功能与存储过程

    介绍 (Introduction) Usually DBAs prefer stored procedures in SQL instead of functions in SQL Server. I ...

最新文章

  1. android xml ui编辑器,Android Studio(八):使用Layout Editor设计UI
  2. 企业生产环境不同业务的Linux分区方案
  3. 健康心理要防八种“过度”
  4. mysql的快照速度_mysql 快照读 当前度
  5. 数组和指针、数组指针和指针数组
  6. python的常量和变量_python变量和常量
  7. 指定特定的内容为首页
  8. PWN-COMPETITION-GeekChallenge2021
  9. 软件加入使用时间_信考宝典 中考软件简介
  10. 应届生去软通动力怎么样_超强干货:应届生如何找实习工作?
  11. cnapckSurround c++builder Region 代码折叠快捷键
  12. latex表格内容上下居中_Latex-表格内容垂直居中
  13. 软件名称后缀含义?(如RC、RTL)
  14. 我国跨境电子商务的发展概念以及发展概况
  15. Qt中的矩阵计算库eigen
  16. 【SQL数据库】数据库的创建、查询、插入等操作使用方法(结合黑皮书教材网站(db-book中的例子)在MySQL Workbench和shell中实现查询操作
  17. 论文翻译之Enriched Feature Guided Refinement Network for Object Detection
  18. php调用mahout包,mahout实现基于用户的Mahout推荐程序
  19. display lldp neighbor brief
  20. 读《学会提问》——少谈些主义,多研究些问题

热门文章

  1. input标签用法解读
  2. webstorm前端常用快捷键
  3. DOS Network一月项目月报
  4. IDEA将项目上传至码云/GitHub托管
  5. windows下eclipse远程连接hadoop集群开发mapreduce
  6. WEB-INFO/lib build path 的jar包问题
  7. python之获取微信服务器的ip地址
  8. Typecho 新浪登陆插件 Sinauth
  9. Java 多线程(三) 线程的生命周期及优先级
  10. dat文件打开乱码_5.2 实战1:解决在Linux下打开Windows汉字文本的乱码问题