c#调用存储过程,写出整个过程, 有带参数的,谢谢,有入有出的,

解决方案 »

  1.   

    定义一个SqlCommand Cmd
    Cmd.CommandText = 存储过程名;
    Cmd.CommandType = System.Data.CommandType.StoredProcedure ;
    Cmd.Parameters.Add(参数,传递的值);
    不返回值
    Cmd.ExecuteNonQuery()
    返回值就用适配器
    System.Data.SqlClient.SqlDataAdapter Adapter =new System.Data.SqlClient.SqlDataAdapter(Cmd);
      

  2.   

    public static void GetServiceOrderFromMobile(string strMobile,ref string[] strServerCode,ref string[] strServerName,ref int intTotals)
    {
    try
    {
    OracleCommand cmd=new OracleCommand();
    cmd.CommandType=System.Data.CommandType.StoredProcedure;
    cmd.Connection=CallCenterDataBase.gDb; cmd.CommandText="p1168_user_info"; cmd.Parameters.Add("in_mobile",OracleType.VarChar, 20);
    cmd.Parameters["in_mobile"].Value=strMobile;
    cmd.Parameters["in_Mobile"].Direction=ParameterDirection.Input;
    cmd.Parameters.Add("out_svrcode",OracleType.VarChar,180);
    cmd.Parameters["out_svrcode"].Direction=ParameterDirection.Output;
    cmd.Parameters.Add("out_subjectname",OracleType.VarChar,180);
    cmd.Parameters["out_subjectname"].Direction=ParameterDirection.Output;
    cmd.Parameters.Add("out_total",OracleType.Int16,14);
    cmd.Parameters["out_total"].Direction=ParameterDirection.Output;
    cmd.ExecuteNonQuery();
    strServerCode=cmd.Parameters["out_svrcode"].Value.ToString().Split(Convert.ToChar(","));
    strServerName=cmd.Parameters["out_subjectname"].Value.ToString().Split(Convert.ToChar(","));
    intTotals=(short)cmd.Parameters["out_total"].Value;
    }
    catch (Exception ex)
    {
    fMain.ShowMessage("根据手机号("+ strMobile +")提取已定制的服务出错("+ ex.Message +")!");
    intTotals=0;
    }
    }
      

  3.   

    谢谢这位大哥,OracleType.Int16,OracleType.Varchar,总共有多少个类型啊, 能不能写出来作为参考,谢谢!
      

  4.   

    你敲OracleType. 后面的就都出来了。
      

  5.   

    用多個參數的存儲調用:
    string[] ParName=new string[參數個數]{參數名稱};
    string[] ParValue=new string[參數個數]{參數相對應的值};
    string[] SqlDbType=new string[參數個數]{參數的類型};
    try
    {
       SqlCommand mycomm=new SqlCommand();
       myconn.Connection=myconn;
       mycomm.CommandType=System.Data.CommandType.StoredProcedure ;
       mycomm.CommandText=參數名稱;
       for(int i=0;i<ParName.Length;i++)
       {
         int Len=200;//定義字符變長數;
         if(SqlDbType[i]=="varchar")
            {
            mycomm.Parameters.Add(ParName[i],SqlDbType[i],Len).Value=ParValue[i];
            }
            else
            {
              mycomm.Parameters.Add(ParName[i],SqlDbType[i]).Value=ParValue[i];
            }
       }
          mycomm.ExecuteNonQuery()
       }
      catch(Exception ee)
      {
       return ee.ToString();
      }
      

  6.   

    网络上看到的:
    存储过程 p_sys_Login 定义如下:CREATE PROCEDURE p_sys_Login    @argUserID   varchar(20),       --用户名    @argPassword varchar(20),       --密码    @argResult   varchar(50) OUTPUT --登录结果AS/*    ... ...*/ 下面演示如何在C#中用最简洁有效的代码执行该存储过程并返回数据:
    /// <summary>/// 用户登录验证/// </summary>/// <param name="userID">用户名</param>/// <param name="password">密码</param>public void Login(string userID, string password){    //数据库连接字符串存储在 Web.config 中    string cnnString = ConfigurationSettings.AppSettings["ConnectionString"];    SqlConnection cnn = new SqlConnection(cnnString); 
        //
        string sql = string.Format("EXEC p_sys_Login '{0}', '{1}', @Result OUTPUT",        userID, password);    SqlCommand cmd = new SqlCommand(sql, cnn);     //建立并添加和“@Result OUTPUT”对应的参数    SqlParameter paramResult = new SqlParameter("@Result", SqlDbType.VarChar, 50);    paramResult.Direction = ParameterDirection.Output;     cmd.Parameters.Add(paramResult);     cnn.Open();    cmd.ExecuteNonQuery();    cnn.Close();     //获取存储过程返回的结果    string result = paramResult.Value.ToString();     //... ...}