2014-10-17 16 views
0

檢查返回過程值我有這個程序如何從SQL

create proc Insert_New_Emp 
    @EMP_Name varchar(50), 
    @EMP_Email varchar(50), 
    @EMP_Role varchar (10), 
    @Username varchar(50), 
    @password varchar(50), 
    @EMP_Phone varchar(15), 
    @EMP_Department varchar(50), 
    @Question varchar(200) 
as 
begin 
    insert into EMP_Info (EMP_Name, EMP_Email, EMP_Role, Username, password, 
          EMP_Phone, EMP_Department, Question) 
    values (@EMP_Name, @EMP_Email, @EMP_Role, @Username, @password, 
      @EMP_Phone, @EMP_Department, @Question) 

    if (exists(select EMP_Role from EMP_Info where EMP_Role ='Admin')) 
     return 'Admin' 
    else 
     return 'Employee' 
end 

我需要檢查的程序代碼在Windows窗體C#

當返回管理員做一些和做其他事情

回答

0

我建議你修改你的SP來返回一個整數值,因爲一個Stored Proc只能返回整數值。 Modiy這樣的: -

聲明@ReturnVal INT 如果(存在(從EMP_Info選擇EMP_Role其中EMP_Role = '管理員')) SET @ReturnVal = 1 - 用於管理收益1 其他 SET @ReturnVal = 2 --return 2員工 返回@ReturnVal 結束

然後你可以從你的ADO.NET代碼中調用該SP爲: -

SqlParameter returnParam = cmd.Parameters.Add("ReturnVal", SqlDbType.Int); 
    returnParam.Direction = ParameterDirection.ReturnValue; 
    cmd.ExecuteNonQuery(); 
//Read the returned value. 
    int UserType= (int) returnParam.Value; 

而且,它會更好,如果你定義一個枚舉在你的代碼裏E本在SP利用這個在你的代碼,而不是硬編碼: -

public enum EmployeeType 
    { 
     Admin = 1, 
     Employee = 2 
    } 
+0

ReturnVal其中一個 – 2014-10-22 16:33:57

+0

@Shaimaa - 只是包括烏爾SP局部變量和返回它,已經更新了代碼。 – 2014-10-22 16:59:05

+0

返回null SqlCommand cmd = new SqlCommand(「SELECT UserName,Password FROM EMP_Info WHERE UserName ='」+ txt_Username.Text +「'and Password ='」+ txt_password.Text +「'」,sqlcon); cmd.CommandText =「Check_role」; cmd.CommandType = CommandType.StoredProcedure; SqlParameter returnParam = cmd.Parameters.AddWithValue(「@ result」,SqlDbType.Int); returnParam.Direction = ParameterDirection.ReturnValue; cmd.ExecuteNonQuery(); int UserType =(int)returnParam.Value; – 2014-10-22 17:11:01

0

如果你想從c#代碼執行storedproc,那麼你需要做如下:

private void button1_Click(object sender, EventArgs e) { 
using (SqlConnection con = new SqlConnection(dc.Con)) { 
using (SqlCommand cmd = new SqlCommand("sp_Add_contact", con)) { 
    cmd.CommandType = CommandType.StoredProcedure; 

    cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text; 
    cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastName.Text; 

    con.Open(); 
    cmd.ExecuteNonQuery(); 
} 

} }

剛剛從「sp_Add_contact」更換程序名稱和數據類型添加爲您的存儲過程定義

原來的答覆自己的參數:here

1

的return語句返回整數代碼,零表示成功,非零表示警告/錯誤。它不打算返回數據。要將標量值返回給應用程序,請使用OUTPUT參數或SELECT語句。下面的例子。

CREATE PROC Insert_New_Emp 
    @EMP_Name varchar(50) 
    , @EMP_Email varchar(50) 
    , @EMP_Role varchar(10) 
    , @Username varchar(50) 
    , @password varchar(50) 
    , @EMP_Phone varchar(15) 
    , @EMP_Department varchar(50) 
    , @Question varchar(200) 
    , @EmpType varchar(8) OUTPUT 
AS 
    BEGIN 
     INSERT INTO EMP_Info 
       (EMP_Name 
       , EMP_Email 
       , EMP_Role 
       , Username 
       , password 
       , EMP_Phone 
       , EMP_Department 
       , Question 
       ) 
     VALUES (@EMP_Name 
       , @EMP_Email 
       , @EMP_Role 
       , @Username 
       , @password 
       , @EMP_Phone 
       , @EMP_Department 
       , @Question 
       ); 

     IF EXISTS (SELECT EMP_Role 
         FROM  EMP_Info 
         WHERE  EMP_Role = 'Admin') 
      SET @EmpType = 'Admin' 
     ELSE 
      SET @EmpType = 'Employee'; 
    END; 
GO 

CREATE PROC Insert_New_Emp 
    @EMP_Name varchar(50) 
    , @EMP_Email varchar(50) 
    , @EMP_Role varchar(10) 
    , @Username varchar(50) 
    , @password varchar(50) 
    , @EMP_Phone varchar(15) 
    , @EMP_Department varchar(50) 
    , @Question varchar(200) 
AS 
    BEGIN 
     INSERT INTO EMP_Info 
       (EMP_Name 
       , EMP_Email 
       , EMP_Role 
       , Username 
       , password 
       , EMP_Phone 
       , EMP_Department 
       , Question 
       ) 
     VALUES (@EMP_Name 
       , @EMP_Email 
       , @EMP_Role 
       , @Username 
       , @password 
       , @EMP_Phone 
       , @EMP_Department 
       , @Question 
       ); 

     IF EXISTS (SELECT EMP_Role 
         FROM  EMP_Info 
         WHERE  EMP_Role = 'Admin') 
      SELECT 'Admin' AS EmpType 
     ELSE 
      SELECT 'Employee' AS EmpType; 
    END; 
GO