C#操作存储过程,输入参数,返回结果
2007-03-28 23:01
393 查看
SQL存储过程显然是非常强大的,.NET也支持对存储过程的调用,自己尝试着写了个小Sample,因为在SQL的学习中,只是笔记一篇。
环境:WindowXP SP2, VS2005, SQL2005
假定在SQL server上已经存在了NWind数据库,同时有如下的存储过程:(存储过程的功能是根据输入的起始日期和结束日期,返回这个时间段内的销售记录和总销售值,并非本文重点)
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
set ANSI_NULLS ON
2
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
set QUOTED_IDENTIFIER ON
3
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
go
4
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- =============================================
7
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- Author: <Vitoria Tang>
8
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- Create date: <2006.0804>
9
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- Description: <It is a sample procedure for get sales record as specific datetime>
10
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- =============================================
11
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ALTER PROCEDURE [dbo].[User_SalesByYear]
12
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- Input parameters: Begin date, End date
13
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
@BeginDate datetime , @EndDate datetime, @Price int = 0 OUTPUT
14
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
AS
15
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
BEGIN
16
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
--declare @Price money
17
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CREATE TABLE #TempTable
18
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
(ID int not null, ProductName nvarchar(40) not null, Price money not null)
19
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
INSERT INTO #TempTable(ID, ProductName, Price)
21
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
SELECT Orders.OrderID, Products.ProductName, [Order Details].UnitPrice * [Order Details].Discount
22
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
FROM Orders, Products, [Order Details]
23
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
WHERE (
24
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
((Orders.ShippedDate) Is Not Null And
25
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
(Orders.ShippedDate) Between @BeginDate And @EndDate)
26
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
AND
27
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
(Orders.OrderID = [Order Details].OrderID AND [Order Details].ProductID = Products.ProductID)
28
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
);
29
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Select * from #TempTable
31
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Select @Price = sum(Price) from [#TempTable]
33
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Print @Price
34
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
return (@Price)
35
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
END
36
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Sample界面:
![](http://www.cnblogs.com/images/cnblogs_com/vitoriatang/Sql_samples.PNG)
首先建立与数据库的连接:
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private System.Data.SqlClient.SqlConnection _connection = null;
2
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private void InitializeSource()
3
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//’Server name’需要根据自己的实际SqlServer的机器名填上哦
5
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string connetctStr = "Data Source=’Server name’;Initial Catalog=NWind;Integrated Security=True";
6
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if( _connection == null)
7
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_connection = new System.Data.SqlClient.SqlConnection(connetctStr);
8
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
9
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
其次创建执行存储过程的SqlCommand,当然前后需要打开和关闭数据库连接,调用存储过程需要给SqlCommand的CommandType属性赋值为 CommandType.StoredProcedure,我们的存储过程是有输入和输出参数的,那么在添加到SqlCommand.Prameters 集合中就可以了。如果是输出参数,设置SqlParameter实例的Direction值就可以了,该属性默认值为Input,所以不设置的话,在执行完后,得不到输出值哦。具体参见下面的代码。
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private SqlCommand GetCommand(object sender, EventArgs e)
2
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
3
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// User_SalesByYear是存储过程的名字
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string cmdText = "User_SalesByYear";
5
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
SqlCommand executeCmd = new SqlCommand();
6
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.Connection = _connection;
7
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 指出executeCmd是执行存储过程
8
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.CommandType = CommandType.StoredProcedure;
9
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.CommandText = cmdText;
10
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 看上面的存储过程,因为是有三个输入参数,我们需要给填到SqlCommand.Parameters集合中
11
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 参数一:BeginDate
12
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
SqlParameter parameter = new SqlParameter( "@BeginDate", SqlDbType.DateTime);
13
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter.Value = new DateTime( 1995, 1,1);
14
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.Parameters.Add(parameter);
15
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 参数二:EndDate
16
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter = new SqlParameter("@EndDate", SqlDbType.DateTime);
17
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter.Value = new DateTime(1995, 12, 30);
18
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.Parameters.Add(parameter);
19
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 参数三:Price,这是个输出参数,需要指明参数方向,否则存储过程的输出值不会写到参数中来
20
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter = new SqlParameter("@Price", 0);
21
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter.Direction = ParameterDirection.InputOutput;
22
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.Parameters.Add(parameter);
23
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return executeCmd;
24
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
25
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
本文的示例是用SqlDataAdapter来填充了DataSet并把它显示在DataGridView control上,所以接下来,打开数据库连接创建SqlDataAdapter,并填充DataSet吧.
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private void button1_Click(object sender, EventArgs e)
2
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
3
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_connection.Open();
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
SqlDataAdapter adapter = new SqlDataAdapter();
5
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
adapter.SelectCommand = executeCmd;
6
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DataSet source = new DataSet();
8
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
adapter.Fill(source);
9
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 输出存储过程的输出参数到Output window看看吧
10
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine(executeCmd.Parameters[2].Value);
11
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.dataGridView1.DataSource = source.Tables[0];
12
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_connection.Close();
13
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
14
环境:WindowXP SP2, VS2005, SQL2005
假定在SQL server上已经存在了NWind数据库,同时有如下的存储过程:(存储过程的功能是根据输入的起始日期和结束日期,返回这个时间段内的销售记录和总销售值,并非本文重点)
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
set ANSI_NULLS ON
2
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
set QUOTED_IDENTIFIER ON
3
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
go
4
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- =============================================
7
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- Author: <Vitoria Tang>
8
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- Create date: <2006.0804>
9
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- Description: <It is a sample procedure for get sales record as specific datetime>
10
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- =============================================
11
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ALTER PROCEDURE [dbo].[User_SalesByYear]
12
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
-- Input parameters: Begin date, End date
13
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
@BeginDate datetime , @EndDate datetime, @Price int = 0 OUTPUT
14
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
AS
15
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
BEGIN
16
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
--declare @Price money
17
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CREATE TABLE #TempTable
18
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
(ID int not null, ProductName nvarchar(40) not null, Price money not null)
19
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
INSERT INTO #TempTable(ID, ProductName, Price)
21
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
SELECT Orders.OrderID, Products.ProductName, [Order Details].UnitPrice * [Order Details].Discount
22
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
FROM Orders, Products, [Order Details]
23
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
WHERE (
24
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
((Orders.ShippedDate) Is Not Null And
25
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
(Orders.ShippedDate) Between @BeginDate And @EndDate)
26
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
AND
27
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
(Orders.OrderID = [Order Details].OrderID AND [Order Details].ProductID = Products.ProductID)
28
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
);
29
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Select * from #TempTable
31
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Select @Price = sum(Price) from [#TempTable]
33
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Print @Price
34
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
return (@Price)
35
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
END
36
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Sample界面:
首先建立与数据库的连接:
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private System.Data.SqlClient.SqlConnection _connection = null;
2
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private void InitializeSource()
3
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//’Server name’需要根据自己的实际SqlServer的机器名填上哦
5
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string connetctStr = "Data Source=’Server name’;Initial Catalog=NWind;Integrated Security=True";
6
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if( _connection == null)
7
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_connection = new System.Data.SqlClient.SqlConnection(connetctStr);
8
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
9
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
其次创建执行存储过程的SqlCommand,当然前后需要打开和关闭数据库连接,调用存储过程需要给SqlCommand的CommandType属性赋值为 CommandType.StoredProcedure,我们的存储过程是有输入和输出参数的,那么在添加到SqlCommand.Prameters 集合中就可以了。如果是输出参数,设置SqlParameter实例的Direction值就可以了,该属性默认值为Input,所以不设置的话,在执行完后,得不到输出值哦。具体参见下面的代码。
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private SqlCommand GetCommand(object sender, EventArgs e)
2
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
3
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// User_SalesByYear是存储过程的名字
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string cmdText = "User_SalesByYear";
5
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
SqlCommand executeCmd = new SqlCommand();
6
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.Connection = _connection;
7
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 指出executeCmd是执行存储过程
8
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.CommandType = CommandType.StoredProcedure;
9
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.CommandText = cmdText;
10
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 看上面的存储过程,因为是有三个输入参数,我们需要给填到SqlCommand.Parameters集合中
11
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 参数一:BeginDate
12
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
SqlParameter parameter = new SqlParameter( "@BeginDate", SqlDbType.DateTime);
13
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter.Value = new DateTime( 1995, 1,1);
14
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.Parameters.Add(parameter);
15
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 参数二:EndDate
16
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter = new SqlParameter("@EndDate", SqlDbType.DateTime);
17
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter.Value = new DateTime(1995, 12, 30);
18
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.Parameters.Add(parameter);
19
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 参数三:Price,这是个输出参数,需要指明参数方向,否则存储过程的输出值不会写到参数中来
20
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter = new SqlParameter("@Price", 0);
21
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
parameter.Direction = ParameterDirection.InputOutput;
22
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
executeCmd.Parameters.Add(parameter);
23
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return executeCmd;
24
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
25
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
本文的示例是用SqlDataAdapter来填充了DataSet并把它显示在DataGridView control上,所以接下来,打开数据库连接创建SqlDataAdapter,并填充DataSet吧.
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private void button1_Click(object sender, EventArgs e)
2
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
3
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_connection.Open();
4
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
SqlDataAdapter adapter = new SqlDataAdapter();
5
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
adapter.SelectCommand = executeCmd;
6
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DataSet source = new DataSet();
8
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
adapter.Fill(source);
9
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 输出存储过程的输出参数到Output window看看吧
10
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine(executeCmd.Parameters[2].Value);
11
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.dataGridView1.DataSource = source.Tables[0];
12
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_connection.Close();
13
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
14
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
相关文章推荐
- C#操作存储过程,输入参数,返回结果
- C#操作存储过程,输入参数,返回结果
- C#操作存储过程,输入参数,返回结果
- C# 调用存储过程操作 OUTPUT参数和Return返回值
- C#调用存储过程 返回值,输出参数,返回结果集
- C# 获取存储过程 返回的参数Output
- 关于C#中如何调用有输入参数和输出参数的存储过程
- C#执行带参数,返回参数的存储过程
- c#调用带参数或返回值的存储过程
- Microsoft SQL Server 2000在复制的时候包含两个过程,攻击者可以操作输入提供恶意参数给存储过程,可导致执行任意命令。
- WinForm_存储过程-传入参数返回结果集
- C#使用带返回参数的存储过程
- [C#对Oracle操作]C#操作调用Orcale存储过程有参数
- asp.net 操作带输入输出参数的分页存储过程(三)
- c#执行sqlserver带返回参数的存储过程
- 存储过程输出参数:C#中调用输入输出参数的存储过程
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 在C#中使用存储过程(没有输入参数)
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)