ParameterDirection参数方向是C#中一个必须要了解的概念。它指定了参数在与数据库进行通信时的方向,也就是参数是输入参数、输出参数还是输入输出参数。掌握ParameterDirection的使用方法可以让我们更好地使用C#与数据库交互。
一、ParameterDirection枚举类型
在C#中,ParameterDirection是一个枚举类型,它包含了四个值:Input、Output、InputOutput和ReturnValue。
1、Input
Input方向表示此参数是一个输入参数,当我们向数据库发起查询时需要传入某些参数,这些参数就是输入参数。我们可以通过SqlDbType枚举类型来指定参数的数据类型。比如下面这个代码片段:
```csharp
SqlCommand cmd = new SqlCommand();
cmd.Parameters.AddWithValue("@Name", SqlDbType.NVarChar).Value = name;
```
上面的代码用AddWithValue方法添加了一个Input参数,它的名字是Name,数据类型是NVarChar。Value属性用来获取或设置参数的值。
2、Output
Output参数只能从数据库返回值,是一个输出参数。具有Output方向参数的存储过程必须将其输出值赋值给参数的Value或Result属性。下面是Output参数的例子:
```csharp
SqlParameter outputParameter = cmd.Parameters.Add("@OutputParameter", SqlDbType.NVarChar, 50);
outputParameter.Direction = ParameterDirection.Output;
```
上面的代码使用Add方法添加了一个Output参数,它的名字是OutputParameter,数据类型是NVarChar,长度为50。
3、InputOutput
InputOutput方向的参数既可以作为输入参数又可以作为输出参数。当我们需要向数据库传输一些数据并获得一些返回值时,我们可以使用InputOutput参数方向。例如:
```csharp
SqlParameter inputOutputParameter = new SqlParameter();
inputOutputParameter.ParameterName = "@InputOutputParameter";
inputOutputParameter.SqlDbType = SqlDbType.NVarChar;
inputOutputParameter.Direction = ParameterDirection.InputOutput;
inputOutputParameter.Value = "Hello World";
cmd.Parameters.Add(inputOutputParameter);
```
上面的代码使用SqlParameter类创建了一个InputOutput参数,其名字为InputOutputParameter,数据类型为NVarChar,初始值为Hello World。
4、ReturnValue
ReturnValue方向的参数用来获取存储过程的执行结果。如果存储过程返回了一个值,可以通过ReturnValue参数获取这个值。例如下面这段代码:
```csharp
SqlParameter returnValueParameter = new SqlParameter("@ReturnValue", SqlDbType.Int);
returnValueParameter.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(returnValueParameter);
```
上面的代码用SqlParameter类创建一个ReturnValue方向参数,它的名字是ReturnValue,数据类型是Int。
二、使用ParameterDirection参数方向
1、添加参数
我们可以通过AddWithValue或Add方法向SqlCommand对象添加参数。它们的区别在于AddWithValue方法需要指定数据类型,而Add方法更灵活,可以对Parameter对象进行更多的设置。
```csharp
public void Add(string parameterName, SqlDbType dbType);
public void Add(string parameterName, SqlDbType dbType, int size);
public void Add(SqlParameter parameter);
```
2、设置ParameterDirection
在创建Parameter时,我们可以设置它的ParameterDirection属性来指定参数方向。例如:
```csharp
SqlParameter inputParameter = cmd.Parameters.Add("@Name", SqlDbType.NVarChar);
inputParameter.Direction = ParameterDirection.Input;
```
3、访问Parameter对象的属性
Parameter对象有几个非常有用的属性,如下所示:
```csharp
public SqlDbType SqlDbType { get; set; }
public ParameterDirection Direction { get; set; }
public bool IsNullable { get; set; }
public string ParameterName { get; set; }
public int Size { get; set; }
public object Value { get; set; }
```
我们可以通过这些属性来访问Parameter对象的值、名称、类型、大小和方向等信息。例如:
```csharp
SqlParameter outputParameter = cmd.Parameters.Add("@OutputParameter", SqlDbType.NVarChar, 50);
outputParameter.Direction = ParameterDirection.Output;
Console.WriteLine(outputParameter.ParameterName);
Console.WriteLine(outputParameter.SqlDbType);
Console.WriteLine(outputParameter.Direction);
Console.WriteLine(outputParameter.Size);
```
上面的代码输出outputParameter的名称、数据类型、方向和大小等信息。
4、读取参数的值
可以通过Parameter对象的Value属性来读取参数的值。当我们执行一个查询时,可以通过Output参数和ReturnValue参数来捕获一些返回值。例如:
```csharp
SqlParameter returnValueParameter = new SqlParameter("@ReturnValue", SqlDbType.Int);
returnValueParameter.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(returnValueParameter);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Console.WriteLine("ReturnValue: {0}", returnValueParameter.Value);
```
上面代码执行一个查询,通过ReturnValue参数捕获返回值,并打印出该值。
三、总结
ParameterDirection参数方向是C#与数据库交互中一个非常重要的概念。掌握了ParameterDirection参数方向的概念,我们可以灵活地使用Input、Output、InputOutput和ReturnValue参数来与数据库进行交互。在使用ParameterDirection时,我们需要注意参数方向的设置以及Parameter对象的各项属性值的设置,才能更好地完成来自数据库返回的数据获取任务。