C# 执行存储过程的一些经验

来源:互联网 发布:aaa云php云主机 编辑:程序博客网 时间:2024/05/17 20:13

问题:

如果你的参数添加是在循环体内完成的,
第2次时就会重复添加,此时触发参数过多异常

解决方法1,参数在循环体外添加,for内部只赋值和取返回值
解决方法2,每次循环清空参数Parameters.Clear();

 

====================================================

 

在c#执行存储过程的步骤:

 

  1.             int procResult = 0;
  2.             SqlCommand command = new SqlCommand("proc_Cc", DBHelper.connection);//创建Command对象,调用存储过程proc_Cc
  3.             command.CommandType = CommandType.StoredProcedure;//指定Command命令执行类型
  4.             SqlParameter sp_1 = null;//存储过程的输入参数
  5.             SqlParameter sp_2 = null;
  6.             SqlParameter sp_3 = null;
  7.             SqlParameter sp_4 = null;
  8.             for (int i = 0; i < dic.Count; i++)
  9.             {
  10.                 try
  11.                 {
  12.                     DBHelper.connection.Open();
  13.                     sp_1 = new SqlParameter("@id", SqlDbType.VarChar, 10);//存储过程的输入参数
  14.                     sp_2 = new SqlParameter("@name", SqlDbType.VarChar, 20);
  15.                     sp_3 = new SqlParameter("@price", SqlDbType.Money);
  16.                     sp_4 = new SqlParameter("@count", SqlDbType.Int);
  17.                     sp_1.Value = id;//给存储过程的参数赋值
  18.                     sp_2.Value = dic[i].CookName;
  19.                     sp_3.Value = dic[i].Price;
  20.                     sp_4.Value = dic[i].Count;
  21.                     command.Parameters.AddRange(new SqlParameter[] { sp_1, sp_2, sp_3, sp_4 });
  22.                     procResult = command.ExecuteNonQuery();//获得受影响行数
  23.                     command.Parameters.Clear();//注意:如果不清空,则第2次循环就会重复添加,此时触发参数过多异常!
  24.                     if (procResult == 0)
  25.                     {
  26.                         MessageBox.Show("存储过程失败!");
  27.                     }
  28.                 }
  29.                 catch (Exception ex)
  30.                 {
  31.                     MessageBox.Show(ex.Message);
  32.                 }
  33.                 finally { DBHelper.connection.Close(); }
  34.             }

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

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("@UPass", us.UPass);
         cmd.Parameters.AddWithValue("@PassQuestion", us.PassQuestion);
         cmd.Parameters.AddWithValue("@PassKey", us.PassKey);
         cmd.Parameters.AddWithValue("@Email", us.Email);
         cmd.Parameters.AddWithValue("@RName", us.RName);
         cmd.Parameters.AddWithValue("@Area", us.Area);
         cmd.Parameters.AddWithValue("@Address", us.Address);
         cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);
         cmd.Parameters.AddWithValue("@Phone", us.Phone);
         cmd.Parameters.AddWithValue("@QQ", us.QQ);
         cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;      
         try
         {
             conn.Open();
             cmd.ExecuteNonQuery();
             iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;
         }
         catch (SqlException ex)
         {
             throw ex;
         }
         finally
         {
             conn.Close();
         }
         return iRet;
     }

C#接收存储过程输出参数:

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;
        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
            iRet = (decimal)cmd.Parameters["@Amount"].Value;
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        finally
        {
            conn.Close();
        }
        return iRet;
    }

 

 

原创粉丝点击