簡體   English   中英

數據庫連接; ASP.net中的null引用異常錯誤

[英]Database connection ;Null Reference Exception error in ASP.net

我知道有人問過許多類似的問題。 我仔細檢查了一下它們,幾天后,我仍然不明白我的代碼哪里出了問題。 我是一個初學者,所以如果我看起來有點傻,請忍受。

這是我面臨的問題。 我試圖創建一個簡單的asp.net注冊頁面,該頁面將記錄插入數據庫(在SQL Server上)。 我的網絡表單上有五個文本框,分別是

  • 用戶名
  • 密碼
  • 電子郵件
  • 安全問題
  • SecurityAnswer和一個提交按鈕。

我有這樣編寫的類文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;

public class Student 
{
private static string connStr = "server = localhost; initial catalog = DevelopTest; integrated security = true;";

public static void AddUser(string username, string password, string email, string question, string answer)
{
    string sqlStr = "INSERT INTO Student VALUES(@username, @pass, @email, @question, @answer, 1);"; 
    SqlConnection dbConn = new SqlConnection(connStr);
    SqlCommand sqlComd = new SqlCommand(sqlStr, dbConn);
    sqlComd.Parameters.AddWithValue("@username", username);
    sqlComd.Parameters.AddWithValue("@pass", password);
    sqlComd.Parameters.AddWithValue("@email", email);
    sqlComd.Parameters.AddWithValue("@question", question);
    sqlComd.Parameters.AddWithValue("@answer", answer);

    SqlTransaction tran = null;
    try
    {
        dbConn.Open();
        tran = dbConn.BeginTransaction();
        sqlComd.Transaction = tran; 
        sqlComd.ExecuteNonQuery();
        tran.Commit();
    }
    catch (SqlException e)
    {
        tran.Rollback();                        
    }
    finally
    {
        if (dbConn != null) { dbConn.Close(); }
    }


}

然后我將按鈕單擊以這種方式編寫:

protected void btnRegister_Click(object sender, EventArgs e)
{
Student.AddUser(tbUsernameRegs.Text, tbPassRegs.Text, tbeMailRegs.Text, tbSecretQnsRegs.Text, tbSecretAnswRegs.Text);
}

當我單擊一個按鈕時,我得到一個空對象引用異常。 我知道空對象引用意味着我有一個未初始化的對象,但是我已經嘗試發現錯誤已有好幾天了,但仍然無法弄清楚我哪里出了問題。

我希望可以幫助我。 非常感謝。

編輯*這是堆棧跟蹤。

[NullReferenceException: Object reference not set to an instance of an object.]
Student.AddUser(String username, String password, String email, String question, String answer) +290
Registration.btnRegister_Click(Object sender, EventArgs e) +94
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9752490
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +196
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724

在catch塊中,您正在調用

tran.Rollback();

無需檢查tran是否不為null。 可能是連接嘗試失敗,並且此處未創建任何事務:

dbConn.Open();
tran = dbConn.BeginTransaction();

因此,添加對tran變量的null檢查:

catch (SqlException e)
{
    if (tran != null)
    {
        tran.Rollback();                        
    }
}

情侶小事。 您應該清楚地知道要插入的列,並且永遠不要以為它們的順序是正確的...限定插入...

insert into student ( UserName, Password, EMail, Question, Answer, FlagField )
   values ( @username, @pass, @email, @question, @answer, 1 )

如果表中的列分別為“密碼”,“電子郵件”,“用戶名”,將會發生什么情況,那么這些列將無法正確配對。

很抱歉ToString()的建議,令人困惑。 無論如何,它會基於入站參數字符串引發錯誤,盡管期望傳遞為NULL。 您將需要驗證它們的進入,例如

if( username == null)
   username = "";
if( pass == null )
   pass = "";
etc...

然后,應用您的.Parameters.AddWithValue()調用

暫無
暫無

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

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