DBNull引用異常

來源:互聯網
上載者:User

這是我的第一篇部落格,前兩天在寫驗證使用者登入時,遇到了一個DBNull異常。在網上查了一下,原來是在資料庫中空操作引起的異常,於是找到了一篇文章跟我的問題差不多

文章出處:http://www.diybl.com/course/4_webprogram/asp.net/netjs/200855/113099.html

    

後台代碼
   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       //(我本人認為這個地方是錯誤的,應為@@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();
                }
            }

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.