.net中有四个关于参数传入传出的类型 分别是:

System.Data.ParameterDirection.Input

System.Data.ParameterDirection.InputOutput

System.Data.ParameterDirection.Output

System.Data.ParameterDirection.ReturnValue

首先我把.Net中的参数定义为形式参数 而把存储过程的参数定义为实际参数

比如:cmd.Parameters.Add("@Input", System.Data.SqlDbType.Int);  @Input为形式参数

而存储过程的@Input int,  @Input为实际参数

得到的结论如下:

数据库存储过程的实际参数如果没有默认值则形式参数必须传值给实际参数

但是如果形式参数的类型为ParameterDirection.Output 则传给实际参数的永远是空值

如果形式参数的类型为ParameterDirection.ReturnValue 则形式参数不会传值给实际参数 实际参数必须有默认值  否则代码会报错

如果形式参数类型为ParameterDirection.InputOutput 或者 ParameterDirection.Output 则实际参数必须有output 关键字

另外需要注意的是在.net中 System.DBNull.Value表示数据库参数为空值 而不是null

用于测试的存储过程如下:

/*

function:测试C#中 ParameterDirection 枚举类的作用

coder:benniuniu

time:2007-11-25

*/

CREATE PROCEDURE proc_test_SQLParametersValue

@Input int,

@InputOutput int output,

@Output int output,

@ReturnValue int=1

AS

select @Input as Input,@InputOutput as InputOutput,@Output as [Output],@ReturnValue as ReturnValue

return 2

GO

测试用的C# 代码类如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.SqlClient;

using System.Configuration;

using System.Data;

namespace CoderHelper.Test

{

class SQLParametersValue

{

public SQLParametersValue()

{

}

public int? Input=1;

public int? InputOutput=2;

public int? Output=3;

public int? ReturnValue=4;

public int? Input2;

public int? InputOutput2;

public int? Output2;

public int? ReturnValue2;

public void GetData(DataTable dt)

{

SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["LocalSqlConnectionString"]);

SqlCommand cmd = new SqlCommand();

cmd.Connection = conn;

cmd.CommandType = System.Data.CommandType.StoredProcedure;

cmd.CommandText = "proc_test_SQLParametersValue";

cmd.Parameters.Add("@Input", System.Data.SqlDbType.Int);

cmd.Parameters["@Input"].Direction = System.Data.ParameterDirection.Input;

if (Input == null)

{

cmd.Parameters["@Input"].Value = System.DBNull.Value;

}

else

{

cmd.Parameters["@Input"].Value = Input;

}

cmd.Parameters.Add("@InputOutput", System.Data.SqlDbType.Int);

cmd.Parameters["@InputOutput"].Direction = System.Data.ParameterDirection.InputOutput;

if (InputOutput == null)

{

cmd.Parameters["@InputOutput"].Value = System.DBNull.Value;

}

else

{

cmd.Parameters["@InputOutput"].Value = InputOutput;

}

cmd.Parameters.Add("@Output", System.Data.SqlDbType.Int);

cmd.Parameters["@Output"].Direction = System.Data.ParameterDirection.Output;

if (Output == null)

{

cmd.Parameters["@Output"].Value = System.DBNull.Value;

}

else

{

cmd.Parameters["@Output"].Value = Output;

}

cmd.Parameters.Add("@ReturnValue", System.Data.SqlDbType.Int);

cmd.Parameters["@ReturnValue"].Direction = System.Data.ParameterDirection.ReturnValue;

if (ReturnValue == null)

{

cmd.Parameters["@ReturnValue"].Value = System.DBNull.Value;

}

else

{

cmd.Parameters["@ReturnValue"].Value = ReturnValue;

}

SqlDataAdapter sa = new SqlDataAdapter(cmd);

try

{

if (conn.State == System.Data.ConnectionState.Closed)

{

conn.Open();

}

sa.Fill(dt);

if (cmd.Parameters["@Input"].Value != System.DBNull.Value)

Input2 = Convert.ToInt32(cmd.Parameters["@Input"].Value);

if (cmd.Parameters["@InputOutput"].Value != System.DBNull.Value)

InputOutput2 = Convert.ToInt32(cmd.Parameters["@InputOutput"].Value);

if (cmd.Parameters["@Output"].Value != System.DBNull.Value)

Output2 = Convert.ToInt32(cmd.Parameters["@Output"].Value);

if (cmd.Parameters["@ReturnValue"].Value != System.DBNull.Value)

ReturnValue2 = Convert.ToInt32(cmd.Parameters["@ReturnValue"].Value);

}

catch (Exception ex)

{

}

finally

{

conn.Close();

}

}

}

}

如上代码

public int? Output=3; 但是实际传给存储过程的值还是空值

public int? ReturnValue=4; 但是实际没有传值给存储过程

ReturnValue2 = Convert.ToInt32(cmd.Parameters["@ReturnValue"].Value); 取的是存储过程return的返回值此例存储过程代码是 return 2 所以取得值是2

C# ParameterDirection相关推荐

  1. ParameterDirection中的参数(Input,Output,InputOutput,ReturnValue)

    ParameterDirection中的参数类型定义,首先看ParameterDirection定义 1 // 摘要: 2 // 指定查询内的有关 System.Data.DataSet 的参数的类型 ...

  2. ParameterDirection

    1). .Net中的参数定义为形式参数 而把存储过程的参数定义为实际参数: 2). 数据库存储过程的实际参数如果没有默认值则形式参数必须传值给实际参数: 3). 但是如果形式参数的类型为Paramet ...

  3. ParameterDirection参数类型

    1. System.Data The ParameterDirection values are used by the parameter direction properties of OleDb ...

  4. ParameterDirection.ReturnValue例子

    存储过程 ALTER procedure mysp_get as set nocount on declare @ss int  select @ss=count(*) from Employees ...

  5. 关于System.Data.ParameterDirection四个枚举类型所起的作用(转)

    相信大家都知道.net中有四个关于参数传入传出的类型 分别是: System.Data.ParameterDirection.Input System.Data.ParameterDirection. ...

  6. parameterdirection和direction的问题

    MakeParam函数  1public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, Paramete ...

  7. ParameterDirection.ReturnValue 和ParameterDirection.OutPut的区别?

    ParameterDirection.ReturnValue 和ParameterDirection.OutPut返回值的区别? Output 参数是输出参数. ReturnValue 参数表示诸如存 ...

  8. System.Data : ParameterDirection参数类型

    1. System.Data The ParameterDirection values are used by the parameter direction properties of OleDb ...

  9. 【转载】System.Data.ParameterDirection 参数的说明

    看了此文,感觉大有收获,真是O(∩_∩)O谢谢楼主呀 http://dev.tot.name/dotnet/html/2008122/20081202161923.htm 相信大家都知道.net中有四 ...

最新文章

  1. Android权限申请完全解析(一):Android自带的权限申请
  2. 完全平方数(打表+二分)
  3. 一种新的url定向技术-使用@与/?
  4. 北斗导航 | 监测和减轻空间天气对GNSS应用的影响
  5. python(5)- 基础数据类型
  6. PHP 连接MySQL数据库
  7. L2-019 悄悄关注(STL)
  8. 监听下拉框,当前选中值
  9. 如何在电脑网页下载准考证
  10. java参考文献大全
  11. C++ Opencv安装学习笔记
  12. HTML 拖放功能 - DragDrop
  13. 在线打开.mpp文件工具备忘录
  14. 电源开关电源200W 12V 24V,电源架构PFC+LLC+同步整流,高效率高功率因数
  15. 串口服务器采集需要通讯协议么,C2000-A2-SDX6000-CX1
  16. 机器学习作业-交通流量预测综述
  17. Python面试——基础面试题
  18. 分销系统|分销商城小程序开发方式有什么?
  19. 循环渐进NsDoor(一)
  20. 10只老鼠与1000瓶药水

热门文章

  1. 6s模型c语言,6S模型.doc
  2. java rgb透明色_【人像分割】Java给透明图片加背景色
  3. 安全加密 - 对称加密和非对称加密区别
  4. 关于MS OFFICE安装失败、无法卸载干净的完美解决方案
  5. 关于scrapy的安装以及初步入门
  6. 毕设springBoot+vue 在线音乐网站系统(含源码+论文)
  7. element表格图片放大_element-ui表格缩略图悬浮放大
  8. IDEA 注释模板配置
  9. 绝地求生,PUBG卡在初始界面无法进入怎么办
  10. 电话销售如何避免打电话被封呢?