存储过程的使用

前面有篇文章已经介绍了如何在sqlserver2000中创建存储过程,
那么在这里我们就来具体
看看在C#中如何使用. 
先看看创建输入参数的存储过程如何在C#中使用. 
创建一个简单的插入存储过程,代码如下: 
create procedure TestProcedure 
@id 
int
@uname varchar(
20 ),@upass varchar( 20
as  
insert into [user] values(@id,@uname,@upass) 
GO 
然后在C#中使用,来看看,界面上有三个文本框以供用户输入数据
,textBox1,textBox2,textBox3 
using  (SqlConnection conn  =   new  SqlConnection(connstring)) 

  conn.Open(); 
  SqlCommand command 
= new SqlCommand(); 
  command.CommandText 
= "TestProcedure";//指定存储过程名 
  command.Connection = conn; 
  command.CommandType
=CommandType.StoredProcedure;
/
/
指定类型为存储过程 
  SqlParameter sp = new SqlParameter(); 

  sp.ParameterName 
= "@id"
  sp.SqlDbType 
= SqlDbType.Int; 
  sp.Value 
= int.Parse(this.textBox1.Text); 
  command.Parameters.Add(sp); 

  sp 
= new SqlParameter(); 
  sp.ParameterName 
= "@uname"
  sp.SqlDbType 
= SqlDbType.VarChar; 
  sp.Value 
= this.textBox2.Text; 
  command.Parameters.Add(sp); 

  sp 
= new SqlParameter(); 
  sp.ParameterName 
= "@upass"
  sp.SqlDbType 
= SqlDbType.VarChar; 
  sp.Value 
= this.textBox3.Text; 
  command.Parameters.Add(sp); 
  command.ExecuteNonQuery(); 

  conn.Close(); 
}
 


 
http://www.cnblogs.com/qinfei/archive/2005/11/03/268240.html

存储过程在C#中的使用(2)
// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值),
参数为数据库连接、存储过程名、存储过程参数。

         public   static  SqlCommand BuildQueryCommand(SqlConnection connection, 
string  storedProcName, IDataParameter[] parameters)
        
{
            SqlCommand command 
= new SqlCommand(storedProcName, connection);
            command.CommandType 
= CommandType.StoredProcedure;
            
foreach (SqlParameter parameter in parameters)
            
{
                command.Parameters.Add(parameter);
            }

            
return command;
        }


        
// 执行存储过程,返回结果集
         public   static  DataSet RunProcedure( string  storedProcName, 
IDataParameter[]
 parameters, 
string  tableName)
        
{
            SqlConnection connection 
= new SqlConnection
(connectionString);
            DataSet dataSet 
= new DataSet();
            connection.Open();
            SqlDataAdapter sqlDA 
= new SqlDataAdapter();
            sqlDA.SelectCommand 
= BuildQueryCommand(connection, 
storedProcName, 
parameters);
            sqlDA.Fill(dataSet, tableName);
            connection.Close();
            
return dataSet;

        }




// IDataParameter[]使用 
从表面上看,IDataParameter[]的实例就是一个IDataParameter的数组。
而IDataParameter实际上是不能直接实例化的,所以这种数组其实很不常见,
仅仅会出现在函数的入口参数里面。且多以params的形式出现。这样做的好处
是令这个函数可以对付所有的数据库。
 
        IDataParameter[]简单的说来,就是可以包含任何数据库参数的数组,
这些参数可以是SqlParameter或者OleDbParameter,但是,IDataParameter[]
不可以直接从SqlParameter[]转换过来。


        下面是三种创建IDataParameter[]的方法:
一、直接构造:
IDataParameter[] parameters 
=   new  IDataParameter[] { sqlparameter1, sqlparameter2, new SqlParameter() }
二、通过ArrayList转换。
ArrayList paramlist 
=   new  ArrayList()
paramlist.Add( sqlparameter1 );
.
.
IDataParameter param 
=  (IDataParameter[]) paramlist.ToArray
typeof ( IDataParameter ) );
三、通过其他Parameter类型的数组创建。
SqlParameter[] _param 
=   new  SqlParameter[] . }

IDataParameter[] param 
=   new  IDataParameter[ _param.Length ];
_param.CopyTo( param, 
0  );

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle存储过程可以使用List来传递多个值作为参数,下面是一个使用List作为参数的存储过程的示例: ```sql CREATE OR REPLACE PROCEDURE get_employee_details( p_employee_ids IN VARCHAR2, p_employee_names OUT SYS_REFCURSOR ) IS BEGIN OPEN p_employee_names FOR SELECT employee_id, employee_name, salary FROM employees WHERE employee_id IN ( SELECT regexp_substr(p_employee_ids, '[^,]+', 1, LEVEL) AS employee_id FROM dual CONNECT BY LEVEL <= LENGTH(p_employee_ids) - LENGTH(REPLACE(p_employee_ids, ',', '')) + 1 ); END; ``` 在上面的示例中,存储过程`get_employee_details`定义了一个输入参数`p_employee_ids`和一个输出参数`p_employee_names`。输入参数`p_employee_ids`是一个逗号分隔的员工ID列表,输出参数`p_employee_names`是一个游标,用于返回查询结果。 存储过程的功能是根据输入的员工ID列表查询员工的姓名和薪水,并将结果存储在输出参数中。为了实现这个功能,存储过程使用了正则表达式来解析输入的员工ID列表,并使用游标将查询结果返回。 你可以像下面这样调用这个存储过程: ```sql DECLARE v_employee_ids VARCHAR2(100) := '1001,1002,1003'; v_employee_names SYS_REFCURSOR; BEGIN get_employee_details(v_employee_ids, v_employee_names); -- 处理游标返回的数据 END; ``` 在上面的示例中,我们定义了一个逗号分隔的员工ID列表`v_employee_ids`,并将它作为输入参数传递给存储过程`get_employee_details`。存储过程将查询结果存储在输出参数`v_employee_names`中,我们可以通过游标来访问这些数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值