现在的位置: 首页 > 综合 > 正文

C#处理存储过程

2013年10月08日 ⁄ 综合 ⁄ 共 4060字 ⁄ 字号 评论关闭

1.获取Return返回值
程序代码
//存储过程
//Create PROCEDURE MYSQL
//     @a int,
//     @b int
//AS
//     return @a @b
//GO


SqlConnection conn new SqlConnection(conStr); //conStr数据库连接字符串
conn.Open();
SqlCommand cmd new SqlCommand("MYSQL", conn); //MYSQL存储过程名
MyCommand.CommandType CommandType.StoredProcedure;

//传递存储过程参数值
cmd.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
cmd.Parameters["@a"].Value 10;
cmd.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
cmd.Parameters["@b"].Value 20;
cmd.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
cmd.Parameters["@return"].Direction ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
Response.Write(cmd.Parameters["@return"].Value.ToString());

 

另一种写法

C#接收存储过程return返回值:

     public static int User_Add(User us)
     {
         int iRet;
         SqlConnection conn new SqlConnection(Conn_Str);
         SqlCommand cmd new SqlCommand("User_Add", conn);
         cmd.CommandType CommandType.StoredProcedure;
         cmd.Parameters.AddWithValue("@UName", us.UName);

         cmd.Parameters.AddWithValue("@QQ", us.QQ);
         cmd.Parameters.Add("@RETURN_VALUE", "").Direction         ParameterDirection.ReturnValue;       
         conn.Open();
         cmd.ExecuteNonQuery();
         iRet (int)cmd.Parameters["@RETURN_VALUE"].Value;
         conn.Close();
         return iRet;
     }

 

 

2.获取Output输出参数值


程序代码
//存储过程
//Create PROCEDURE MYSQL
//     @a int,
//     @b int,
//     @c int output
//AS
//     Set @c @a @b
//GO
SqlConnection conn new SqlConnection(conStr);
conn.Open();
SqlCommand cmd new SqlCommand("MYSQL", conn);
cmd.CommandType CommandType.StoredProcedure;


cmd.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
cmd.Parameters["@a"].Value 20;
cmd.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
cmd.Parameters["@b"].Value 20;
cmd.Parameters.Add(new SqlParameter("@c", SqlDbType.Int));
cmd.Parameters["@c"].Direction ParameterDirection.Output;
cmd.ExecuteNonQuery();
Response.Write(cmd.Parameters["@c"].Value.ToString());

-------------------------------------------------------------------------------------------

另一种写法

    public static decimal Cart_UserAmount(int UID)
    {
        decimal iRet;
        SqlConnection conn new SqlConnection(Conn_Str);
        SqlCommand cmd new SqlCommand("Cart_UserAmount", conn);
        cmd.CommandType CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@UID", UID);
        cmd.Parameters.Add("@Amount", SqlDbType.Decimal).Direction=ParameterDirection.Output;
        conn.Open();
        cmd.ExecuteNonQuery();
        iRet (decimal)cmd.Parameters["@Amount"].Value;
         conn.Close();
        return iRet;
    }

    存储过程简介

  简单的说,存储过程是由一些sql语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用。它的参数可以被传递和返回。与应用程序中的函数过程类似,存储过程可以通过名字来调用,而且它们同样有输入参数和输出参数。

  根据返回值类型的不同,我们可以将存储过程分为三类:返回记录集的存储过程,返回数值的存储过程(也可以称为标量存储过程),以及行为存储过程。顾名思义,返回记录集的存储过程的执行结果是一个记录集,典型的例子是从数据库中检索出符合某一个或几个条件的记录;返回数值的存储过程执行完以后返回一个值,例如在数据库中执行一个有返回值的函数或命令;最后,行为存储过程仅仅是用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。

  使用存储过程的好处

  相对于直接使用sql语句,在应用程序中直接调用存储过程有以下好处:

  (1)减少网络通信量。调用一个行数不多的存储过程与直接调用sql语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行sql语句,那么其性能绝对比一条一条的调用sql语句要高得多。

  (2)执行速度更快。有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。

  (3)更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。

  (4) 布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。

  由以上的分析可以看到,在应用程序中使用存储过程是很有必要的。

 

3参数太多时的处理方法 

于是在编译器中键入相应代码。这些代码是在调用不带参数的存储过程的代码的基础上改的。具体代码如下:

sqlconnection conn=new sqlconnection(“connectionstring”);

sqldataadapter da new sqldataadapter();

da.selectcommand new sqlcommand();

da.selectcommand.connection conn;

da.selectcommand.commandtext "nameofprocedure’para1’,’para2’,para3";

da.selectcommand.commandtype commandtype.storedprocedure;

  为了使代码更具有代表性,要调用的存储过程的第一个和第二个参数都为字符串类型,第三个参数为整型。执行以后发现,完全可以达到预期的效果!

  两种调用方法的比较

由于对存储过程参数的处理比较笼统,在上面方法中如果要获取输出参数或者得到存储过程的返回值,这种方法就不能满足需要了。

返回记录集的存储过程和直接用sql语句得到数据 处理方法一样。create proc proc_Test

as

select *  from item

select * from ItemAssembleDetail

SqlConnection conn = new sqlconnection(“connectionstring”);

抱歉!评论已关闭.