晕~` 没时间看你的东西了
我顶
MARK

解决方案 »

  1.   

    http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0306haungs/0306haungs.shtml
      

  2.   

    呵呵,顶
    Sql Server用过,但DB2就不知道了。
    我的一些经验:http://blog.csdn.net/dobly/archive/2004/07/23/50033.aspx
      

  3.   

    http://www.jiafangyifang.com/news/newsdata/2003_07_08/4/20030708151255.htm
      

  4.   

    DB2  晕  俺不会  EXEC应该不可以吧,这要看DB2了
      

  5.   

    创建存储过程(在sql Server 的查询分析器中):
    create procedure myProce
    as
    select * from myTable------------------------
    程序调用存储过程:
    dsn=ConfigurationSettings.AppSettings["ConnStr"];
    SqlConnection conn=new SqlConnection(dsn);SqlCommand comd=new SqlCommand("myProce",conn); //字符串是调用的存储过程名称
    comd.CommandType=CommandType.StoredProcedure;   //告诉comd,你要使用存储过程方式conn.Open();
    SqlDataReader dr=comd.ExecuteReader();
    conn.Close();
      
      ....... 下面我就不用罗嗦了吧,^^....
      

  6.   

    使用Create Procedure创建存储过程
    你可以使用Create Procedure来创建一个存储过程。下面就是一个非常简单的存储过程的一个例子:CREATE PROCEDURE retrieve_authors 
    AS 
    SELECT * FROM Authors本例子中,存储过程的名称为retrieve_authors。你可以给存储过程赋予任何你想要的名称,但最好你能够使该名称在一定程度上描述存储过程的功能。为了指明是存储过程一部分的SQL语句,你只需简单地在关键词AS后面包含它们。你可以使用EXECUTE语句来执行一个存储过程。
    比如,为了执行retrieve_authors存储过程,你可以使用如下的语句:EXECUTE retrieve_authors当执行该存储过程时,所有包括在其中的SQL语句都会执行,在上面的例子中,会返回所有在Authors表中的记录。
    当在批处理中的第一个语句是调用存储过程时,你并不需要使用EXECUTE语句。你可以简单地提供存储过程的名称来执行存储过程。比如在ISQL/W中,可以象下面所示来执行存储过程:
    retrieve_authors
    这起同样的作用。存储过程会被执行,并会返回结果。然而如果在该存储过程之前还有其他的任何语句,你就会收到错误信息(一般地,语法错误)。当你创建和执行一个存储过程时,这仅仅是在某一个数据库的范围内完成。假设你在数据库MyDatabase内创建了存储过程retrieve_authors。如果没有指明过程调用,你就不能在另一个数据库比如MyDatabase2中调用存储过程retrieve_authors。
    假如你要在Mydatabase2中执行存储过程retrieve_authors,必须使用如下的语句:EXECUTE Mydatabase..retrieve_authors一旦你已经创建了一个存储过程,你就能使用系统存储过程sp_helptext来观看在该存储过程的的SQL语句。比如,如果你输入命令sp_helptext retrieve_authors,就会显示下面的结果:text
    ……………………………………………
    CREATE PROCEDURE retrieve_authors AS SELECT * FROM Authors
    注意
    你可能感到奇怪的是,sp_helptext系统过程本身就是一种存储过程类型。它是一种系统的存储过程。(系统存储过程存储在Master数据库中,能够被所有的数据库访问。)为了满足你的好奇心,你可以使用命令sp_helptext sp_helptext来观看组成sp_helptext本身的SQL语句。
    你在创建完存储过程后,不能对其进行修改。假如你需要修改一个存储过程。你必须首先破坏它,然后重新构建之。为了破坏一个存储过程。你可以使用DROP PROCEDURE语句,例如下面的语句删除retrieve_authors存储过程:
    DROP PROCEDURE retrieve_authors
    注意
    你可以使用系统存储过程sp_help来观看在当前数据库中所有存储过程的列表。假如你不加任何修改地执行了sp_help。该过程会显示在当前数据库中所有的存储过程、触发器和表。假如在sp_help后面跟上指定的存储过程,sp_help会仅仅显示那个存储过程的信息。使用SQL Enterprise Manager 创建存储过程
    假如你要创建一个复杂的存储过程,使用SQL Enterprise Manager要比ISQL/w要容易得多,该程序允许你更容易地修改存储过程,它可以自动为你删除和重新创建存储过程。
    要使用SQL Enterprise Manage来创建一个存储过程。首先启动该程序,选择你要用于存储表的数据库,然后在菜单上选择Manage|Manage Stored Procedure,这时就会显示如图12。4所示的窗口。
    当你第一次打开存储过程管理对话框窗口时,会自动显示文本CREATE PROCEDURE <PROCEDURE NAME>。如果学过上面部分的内容,你就会对该文本非常的熟悉。这是CREATE PROCEDURE语句。替换<PROCEDURE NAME>成你所需要的名称。
    在关键词AS后面,你可以输入组成你存储过程的语句。比如,假设你在数据库中有一个名为Philosophers的数据库表,其中包含了一些哲学家的列表。下面的存储过程在如果在数据库中有Plato存在时,会打印“Plato is a philosopher”;否则它会打印“Plato is not a philosopher”
    ---------------------------------------------------------------
    CREATE PROCEDURE check_philosophers AS
    IF EXISTS(SELECT name FROM Philosophers WHERE name=”Plato”)
    PRINT “Plato is a philosopher”
    ELSE
    PRINT “Plato is not a philosopher”
    --------------------------------------------------------------
    当你已经完成输入存储过程后,你可以点击保存对象按钮来保存之(它看起来象一个绿色的三角形)。
    为了观看在你第一次保存之后的存储过程的文本,你需要在Procedure下拉菜单中再次选择该存储过程。SQL Server会自动在你的文档中插入新的语句。比如,在保存完check_philosophesr过程之后,会显示如下的文本:
    if exists (select * from sysobjects where id=object_id(‘dbo.check_philisophers’) and sysstat & 0xf=4)
    drop procedure dbo.check_philosophers
    GO
    CREATE PROCEDURE check_philosophers AS
    IF EXISTS(SELECT name FROM Philosophers WHERE name=”Plato”)
    PRINT “Plato is a philosopher”
    ELSE
    PRINT “Plato is not a philosopher”
    GO
    为什么SQL Server要添加这些语句呢?这些语句是什么用的呢?这些添加的语句并不包含在存储过程中。它们的使用是使存储过程的使用变得更加容易。
    当在过程中的第一个语句执行时,它检查是否有存储过程check_philosophers已经存在于数据库中。假如该过程已经存在,语句会删除该过程。这样,假如你修改了你的存储过程,然后点击Save Object按钮时,该语句会确保过程在修改后再次创建之前已经被删除了。注意
    在修改你的存储过程时,注意不要删除那些添加的语句。假如说你删除了第一个语句,你就不能正确地保存你的存储过程。相反的,你就会获得一个错误信息告诉你,存储过程已经存在于数据库中(假如你正处于这种情况下,你只需要用语句DROP PROCEDURE来删除前一版本)。
    使用SQL Enterprise Manager而不是ISQL/w来创建你的存储过程的主要优点是使用Enterprise Manage可以在将来很容易地修改存储过程,在已经保存了存储过程之后,你可以使用管理存储过程对话框来选择和修改它。使用ISQL/w在创建了存储过程之后对其进行修改是非常困难的。给存储过程传值
    当你调用一个存储过程时,你可以使用参数来传值给它,从而使你的存储过程变得非常的灵活。
    比如,你想修改过程check_philosophers,使之能够检测是否存在某一个哲学家。你可以使用如下的语句进行修改:
    -----------------------------------------------------------------
    CREATE PROCEDURE check_philosophers
    (@philosopher VARCHAR(30))
    AS 
    IF EXISTS(SELECT name FROM Philosophers WHERE name = @philosopher)
    PRINT “A philosopher”
    ELSE
    PRINT “Not a philisopher”
    -----------------------------------------------------------------
    当该过程执行时,它检查传递给变量@philosopher的姓名是否存在于表Philosophers中。假如@philosopher的值存在于表中,打印文本“A philosopher”,否则打印文本“Not a philisopher”当你在存储过程中包含参数时,你把它们列在CREATE PROCEDURE语句的后面的括号内,但必须在关键词AS之前。对于每一个参数,你都必须指明数据类型。在一个单独的过程中,你最多能设置255个参数。比如下面的过程检查是否在传递的姓名当中,至少有一个是哲学家的姓名:
    CREATE PROCEDURE check_philosophers
    (@firstname VARCHAR(30),@secondname VARCHAR(30))
    AS 
    IF EXISTS(SELECT name FROM Philosophers 
    WHERE name=@firstname OR name=@secondname)
    PRINT “At least one of them is a philosopher”
    ELSE
    PRINT “Neither one of them is a philisopher”
    为了执行一个具有一个或多个参数的存储过程,你只需简单地在存储过程名称的后面列出参数的值。
    比如:
    EXECUTE check_philosophers  “Plato” , ”Aristotle”             假如一个存储过程具有多个参数。你必须以正确的顺序来传值。有时候这并不是很方便。你可以使用另一种方法,通过名称来传递参数,如下所示:
    EXECUTE check_philisophers @firstname=“Plato” ,  @secondname=”Aristotle”  
    该语句完成于前一语句完全相同的事情。然而通过使用参数名,你可以使用任何你想要的顺序来传递参
      

  7.   

    可以把数据一次读取到 DataSet 中,然后在 DataSet 中对数据进行操作,就不用每次去数据库中请求数据了,这样速度可能会快一点如果数据不是经常更新,还可以把 DataSet 缓存起来。
      

  8.   

    有没有人用过DB2呀
    7.2版中是不能直接CREATE PROCEDURE的
    有没有高手讲解一下如何做呀
    我看到好像可以通过集成vc的编译器来编译存储过程
    但是具体如何做实在没有找到
    8.1版没有此问题,可以直接用开发中心来完成
    可是7.2版呢?
      

  9.   

    dobly(杜比@冰点@湖北大学)
    我也是湖大滴
    今年刚毕业滴 不过我再外面混了半年多了
      

  10.   

    写一个中间层 
    public SqlDataReader RunProcDR(string procName) 
    {
    SqlCommand cmd = CreateCommand(procName, null);
    return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    }private SqlCommand CreateCommand(string procName, SqlParameter[] prams) {
    // make sure connection is open
    Open(); //command = new SqlCommand( sprocName, new SqlConnection( ConfigManager.DALConnectionString ) );
    SqlCommand cmd = new SqlCommand(procName, con);
    cmd.CommandType = CommandType.StoredProcedure; // add proc parameters
    if (prams != null) {
    foreach (SqlParameter parameter in prams)
    cmd.Parameters.Add(parameter);
    }

      // return param
    cmd.Parameters.Add(
    new SqlParameter("ReturnValue", SqlDbType.Int, 4,
    ParameterDirection.ReturnValue, false, 0, 0,
    string.Empty, DataRowVersion.Default, null)); return cmd;
    }
      

  11.   

    关注中,,,,,,,ding,,,,,,,,