簡體   English   中英

存儲過程返回空值

[英]Stored Procedure Returns Empty Values

我有一個執行選擇語句的存儲過程,以便將用戶數據返回到登錄時的會話狀態。 到目前為止,通過單擊登錄按鈕調用時,存儲過程僅返回空值。 在對輸入的用戶名進行硬編碼並達到所需結果之后,我通過運行存儲過程在Sql Mgmt Studio中進行了測試。 我在Visual Studio中放置了斷點,發現從輸入的文本框中正確發送了用戶名時,所有參數都以“”的形式返回為空。 這使我相信問題在於格式化輸入參數,但我不知道它是什么。 任何幫助表示贊賞。

這是我的C#方法:

public static User GetUser(int? id, string username)
{
 string SelectById = "spSelectUserById";
 string SelectByUsername = "spSelectUserByUsername";
 User u = new User();            
 string connstring = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
 using (SqlConnection conn = new SqlConnection(connstring))
 {
  SqlCommand cmd = new SqlCommand();
  cmd.CommandType = System.Data.CommandType.StoredProcedure;
  if (string.IsNullOrEmpty(id.ToString()))
  {
   cmd = new SqlCommand(SelectByUsername, conn);
   cmd.Parameters.Add("@UserNameIn", SqlDbType.VarChar).Value = username.ToString();
  }
  else if (string.IsNullOrEmpty(username))
  {
   cmd = new SqlCommand(SelectById, conn);
   cmd.Parameters.Add("@UserId", SqlDbType.Int).Value = id;
  }
   SqlParameter UserName = new SqlParameter();
   SqlParameter Password = new SqlParameter();
   SqlParameter FirstName = new SqlParameter();
   SqlParameter MiddleInitial = new SqlParameter();
   SqlParameter LastName = new SqlParameter();
   SqlParameter UserStar = new SqlParameter();
   SqlParameter UserRank = new SqlParameter();
   SqlParameter UserRankCode = new SqlParameter();
   SqlParameter Assignment = new SqlParameter();
   SqlParameter Shift = new SqlParameter();
   SqlParameter ContactPhone = new SqlParameter();
   SqlParameter PhoneType = new SqlParameter();
   SqlParameter Email = new SqlParameter();
   SqlParameter AssignmentId = new SqlParameter();
   SqlParameter ShiftId = new SqlParameter();
   UserName.ParameterName = "@UserName";
   Password.ParameterName = "@Password";
   FirstName.ParameterName = "@FirstName";
   MiddleInitial.ParameterName = "@MiddleInitial";
   LastName.ParameterName = "@LastName";
   UserStar.ParameterName = "@UserStar";
   UserRank.ParameterName = "@UserRank";
   UserRankCode.ParameterName = "@UserRankCode";
   Assignment.ParameterName = "@Assignment";
   Shift.ParameterName = "@Shift";
   ContactPhone.ParameterName = "@ContactPhone";
   PhoneType.ParameterName = "@PhoneType";
   Email.ParameterName = "@Email";
   AssignmentId.ParameterName = "AssignmentId";
   ShiftId.ParameterName = "ShiftId";
   UserName.SqlDbType = System.Data.SqlDbType.VarChar;
   Password.SqlDbType = System.Data.SqlDbType.VarChar;
   FirstName.SqlDbType = System.Data.SqlDbType.VarChar;
   MiddleInitial.SqlDbType = System.Data.SqlDbType.VarChar;
   LastName.SqlDbType = System.Data.SqlDbType.VarChar;
   UserStar.SqlDbType = System.Data.SqlDbType.Int;
   UserRank.SqlDbType = System.Data.SqlDbType.VarChar;
   UserRankCode.SqlDbType = System.Data.SqlDbType.VarChar;
   Assignment.SqlDbType = System.Data.SqlDbType.VarChar;
   Shift.SqlDbType = System.Data.SqlDbType.VarChar;
   ContactPhone.SqlDbType = System.Data.SqlDbType.VarChar;
   PhoneType.SqlDbType = System.Data.SqlDbType.VarChar;
   Email.SqlDbType = System.Data.SqlDbType.VarChar;
   AssignmentId.SqlDbType = System.Data.SqlDbType.Int;
   ShiftId.SqlDbType = System.Data.SqlDbType.Int;
   UserName.Size = 200;
   Password.Size = 200;
   FirstName.Size = 200;
   MiddleInitial.Size = 200;
   LastName.Size = 200;
   UserStar.Size = 200;
   UserRank.Size = 200;
   UserRankCode.Size = 200;
   UserRankId.Size = 200;
   Assignment.Size = 200;
   Shift.Size = 200;
   ContactPhone.Size = 200;
   PhoneType.Size = 200;
   Email.Size = 200;
   AssignmentId.Size = 200;
   ShiftId.Size = 200;
   UserName.Direction = System.Data.ParameterDirection.Output;
   Password.Direction = System.Data.ParameterDirection.Output;
   FirstName.Direction = System.Data.ParameterDirection.Output;
   MiddleInitial.Direction = System.Data.ParameterDirection.Output;
   LastName.Direction = System.Data.ParameterDirection.Output;
   UserStar.Direction = System.Data.ParameterDirection.Output;
   UserRank.Direction = System.Data.ParameterDirection.Output;
   UserRankCode.Direction = System.Data.ParameterDirection.Output;
   Assignment.Direction = System.Data.ParameterDirection.Output;
   Shift.Direction = System.Data.ParameterDirection.Output;
   ContactPhone.Direction = System.Data.ParameterDirection.Output;
   PhoneType.Direction = System.Data.ParameterDirection.Output;
   Email.Direction = System.Data.ParameterDirection.Output;
   AssignmentId.Direction = System.Data.ParameterDirection.Output;
   ShiftId.Direction = System.Data.ParameterDirection.Output;
   cmd.Parameters.Add(UserName);
   cmd.Parameters.Add(Password);
   cmd.Parameters.Add(FirstName);
   cmd.Parameters.Add(MiddleInitial);
   cmd.Parameters.Add(LastName);
   cmd.Parameters.Add(UserStar);
   cmd.Parameters.Add(UserRank);
   cmd.Parameters.Add(UserRankCode);
   cmd.Parameters.Add(Assignment);
   cmd.Parameters.Add(Shift);
   cmd.Parameters.Add(ContactPhone);
   cmd.Parameters.Add(PhoneType);
   cmd.Parameters.Add(Email);
   cmd.Parameters.Add(AssignmentId);
   cmd.Parameters.Add(ShiftId);
   conn.Open();
   cmd.ExecuteNonQuery();
   u.UserName = UserName.Value.ToString();
   u.Password = Password.Value.ToString();
   u.FirstName = FirstName.Value.ToString();
   u.MiddleInitial = MiddleInitial.Value.ToString();
   u.LastName = LastName.Value.ToString();
   u.UserStar = Convert.ToInt16(UserStar.Value);
   u.UserRank = UserRank.Value.ToString();
   u.UserRankCode = UserRankCode.Value.ToString();
   u.Assignment = Assignment.Value.ToString();
   u.AssignmentId = Convert.ToInt16(AssignmentId.Value);
   u.Shift = Shift.Value.ToString();
   u.ShiftId = Convert.ToInt16(ShiftId.Value.ToString());
   u.ContactPhone = ContactPhone.Value.ToString();
   u.PhoneType = PhoneType.Value.ToString();
   u.Email = Email.Value.ToString();
   return u;
  }
 }

這是我的存儲過程:

CREATE PROCEDURE spSelectUserByUsername
@UserNameIn         VARCHAR(MAX)    =   NULL                ,
@UserId             INT             =   NULL        OUTPUT  ,
@FirstName          VARCHAR(MAX)    =   NULL        OUTPUT  ,
@MiddleInitial      VARCHAR(MAX)    =   NULL        OUTPUT  ,
@LastName           VARCHAR(MAX)    =   NULL        OUTPUT  ,
@UserStar           INT             =   NULL        OUTPUT  ,
@UserRank           VARCHAR(MAX)    =   NULL        OUTPUT  ,
@UserRankCode       VARCHAR(MAX)    =   NULL        OUTPUT  ,
@UserRankId         INT             =   NULL        OUTPUT  ,
@Assignment         VARCHAR(MAX)    =   NULL        OUTPUT  ,
@AssignmentId       INT             =   NULL        OUTPUT  ,
@Shift              VARCHAR(MAX)    =   NULL        OUTPUT  ,
@ShiftId            INT             =   NULL        OUTPUT  ,   
@ContactPhone       VARCHAR(MAX)    =   NULL        OUTPUT  ,
@PhoneType          VARCHAR(MAX)    =   NULL        OUTPUT  ,
@Email              VARCHAR(MAX)    =   NULL        OUTPUT
AS
BEGIN

SELECT 
 @UserId            =   users.user_id                               ,
 @FirstName     =   users.first_name                            ,
 @LastName      =   users.last_name                             ,
 @MiddleInitial =   users.middle_initial                        ,
 @UserStar      =   users.user_star                             , 
 @UserRank      =   CONCAT(users.user_rank,' - ',ranks.title)   ,
 @UserRankCode  =   users.user_rank                             ,
 @UserRankId        =   ranks.id                                    ,
 @AssignmentId  =   users.assignment                            ,
 @Assignment        =   assignment.AssignmentName                   ,
 @ShiftId       =   users.regular_shift                         ,
 @Shift         =   s.DisplayName                               ,
 @ContactPhone  =   users.contact_phone                         ,
 @PhoneType     =   users.phone_type                            ,
 @Email         =   users.email                                     
FROM 
dbo.users
left JOIN
[shift] s   ON  users.regular_shift     =   s.shiftid
left JOIN
assignment  ON  users.assignment        =   assignment.AssignmentId
left JOIN
ranks       ON  users.user_rank         =   ranks.code
WHERE
users.username                          =   @UserNameIn
END

像下面那樣更改您的過程,並使用SqlDataAdapter將結果獲取到DataTable中:

CREATE PROCEDURE spSelectUserByUsername
@UserNameIn         VARCHAR(MAX)    =   NULL                ,

BEGIN

SELECT 
   users.user_id,
   users.first_name,
   users.last_name,
   users.middle_initial,
   users.user_star,
   CONCAT(users.user_rank,' - ',ranks.title),
   users.user_rank,
   ranks.id,
   users.assignment,
   assignment.AssignmentName,
   users.regular_shift,
   s.DisplayName,
   users.contact_phone,
   users.phone_type,
   users.email                                     
FROM  dbo.users
left JOIN [shift] s   ON  users.regular_shift = s.shiftid
left JOIN assignment  ON  users.assignment = assignment.AssignmentId
left JOIN ranks ON users.user_rank = ranks.code
WHERE users.username =  @UserNameIn
END

這樣您就可以使用適配器檢索數據,如下所示:

string connstring = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
DataTable ResultTable = new DataTable();
using (SqlConnection conn = new SqlConnection(connstring))
{
    using (SqlCommand cmd = new SqlCommand())
    {
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.CommandText = "";
        cmd.Parameters.Add("@UserNameIn", SqlDbType.Int).Value = txtUserName.Text; // or what eve that supplay the username
        SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd);
        sqlAdapter.Fill(ResultTable);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM