對象不能從 DBNull 轉換爲其他類型

對象不能從 DBNull 轉換爲其他類型。

說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以瞭解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。

異常詳細信息: System.InvalidCastException: 對象不能從 DBNull 轉換爲其他類型。
        public string  Login(string ManagerName, string ManagerPassword)
        {
            SqlConnection myConnection = con.GetSqlConnection();
            SqlCommand myCommand = new SqlCommand("ManangerLogin", myConnection);
            myCommand.CommandType = CommandType.StoredProcedure;

            SqlParameter parameterManagerName = new SqlParameter("@ManagerName",SqlDbType.NVarChar,50);
            parameterManagerName.Value = ManagerName;
            myCommand.Parameters.Add(parameterManagerName);

            SqlParameter parameterManagerPassword = new SqlParameter("@ManagerPassword",SqlDbType.NVarChar,50);
            parameterManagerPassword.Value=ManagerPassword;
            myCommand.Parameters.Add(parameterManagerPassword);

            SqlParameter parameterManagerID = new SqlParameter("@ManagerID", SqlDbType.Int, 4);
            parameterManagerID.Direction = ParameterDirection.Output;
            myCommand.Parameters.Add(parameterManagerID);

            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myConnection.Close();


                int managerId = Convert.ToInt16(parameterManagerID.Value);//運行到這裏時出錯!
                if (managerId == 0)
                {
                    return null;
                }
                else
                {
                    return managerId.ToString();
                }
         
           
        }

所調用的存儲過程:

alter PROCEDURE ManangerLogin
(
  @ManagerName nvarchar(50),
  @ManagerPassword nvarchar(50),
  @ManagerID int output
)
AS
BEGIN
select @ManagerID=ManagerID
from Manager
where ManagerName=@ManagerName and ManagerPassword=@ManagerPassword
if @@RowCount<0
select
@ManagerID=0
END
GO

原因:parameterManagerID.Value返回的值是 DBNull,也就是說相當於數據庫單元格中什麼值也沒有,事先判斷這種情況

代碼改爲:


            if (Convert.IsDBNull(parameterManagerID.Value))//對返回dbnull進行判斷
            {
                return null;

            }
            else
            {
                int managerId = (int)(parameterManagerID.Value);
                if (managerId == 0)
                {
                    return null;
                }
                else
                {
                    return managerId.ToString();
                }
            }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章