30/09/2018, 16:23

C# Xin hướng dẫn Sử dụng Procedure nhận tham số output

Mình có đoạn code này nhưng nó chạy bị sai
P/s mình muốn hỏi có bạn nào share mình code hàm procedure mà truyền vào giá trị và trả vê giá trị

public static bool ExcuteProcedure(string procName, SqlParameter[] parameters, SqlParameter[] parametersOut, string[] valueIn,string[] valueOut, string[] dataNameIn, string[] dataNameOut)
        {
            try
            {
                con = DataProvider.connect();
                command = DataProvider.createCommandProcedure(con, procName);
                if (parameters != null)
                {
                    foreach (SqlParameter para in parameters)
                    {
                        command.Parameters.Add(para);
                    }
                    int length = dataNameIn.Length;
                    for (int i = 0; i < length; i++)
                    {
                        command.Parameters[dataNameIn[i]].Value = valueIn[i];
                    }
                }
                if (parametersOut != null)
                {
                    foreach (SqlParameter para in parametersOut)
                    {
                        command.Parameters.Add(para).Direction = ParameterDirection.Output;
                    }
                }
                command.ExecuteNonQuery();
                if (parametersOut != null)
                {
                    int num = dataNameOut.Length;
                    for (int i = 0; i < num; i++)
                    {
                        valueOut[i] = command.Parameters[dataNameOut[i]].Value.ToString();
                    }
                }
                con.Close();
                return true;
            }
            catch (Exception ex)
            {
                throw new Exception("Lỗi function DataService.ExcuteProcedure()!!!  
" + ex.Message);
                con.Close();
                return false;
            }
        }
Phạm Hoàng Tuấn viết 18:25 ngày 30/09/2018

Mình có hàm trả về giá trị kiểu int, bạn có thể tùy biến để trả về giá trị khác, Mình chưa thử trả về kiểu mảng hay gì đó.

 public int ExecuteNonQuery_output(SqlCommand cmd)
        {
            int result;
            try
            {
                _con.Open();
                cmd.Connection = _con;
                result = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception("Loi khi thuc thi lenh SQL: " + ex.Message);
            }
            finally
            {
                _con.Close();
            }
            try
            {
                result = (int)cmd.Parameters["@output"].Value;
            }
            catch { }

            return result;
        }

Bạn viết Store Procedure có kết quả trả về dùng keyword @output.
ví dụ:

CREATE PROCEDURE GetImmediateManager
   @employeeID INT,
   @managerID INT OUTPUT
AS
BEGIN
   SELECT @managerID = ManagerID 
   FROM HumanResources.Employee 
   WHERE EmployeeID = @employeeID
END

Cách sử dụng gọi hàm :

 public ArrayList DangNhap()
        {
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "usp_Vuong_DangNhap";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@ten_tai_khoanOremail", SqlDbType.VarChar).Value = Email;
            cmd.Parameters.Add("@mat_khau", SqlDbType.VarChar).Value = MatKhau;
            cmd.Parameters.Add("@output", SqlDbType.Int).Direction = ParameterDirection.Output;
            DataTable dt = new DataTable();
            dt = dp.ExecuteReader(cmd);
            ArrayList kq = new ArrayList();
            kq.Add(Convert.ToInt32(cmd.Parameters["@output"].Value));
            kq.Add(dt);
            return kq;
        }
Kaiser viết 18:32 ngày 30/09/2018

thanks minhf sua duoc rui =)))
SqlParameter[] paraOut = { new SqlParameter("@NAME", SqlDbType.NVarChar,40),
(thieu size nen bi loi =))) )

Bài liên quan
0