C#System.NullReferenceException,即使已初始化

本文关键字:初始化 NullReferenceException C#System | 更新日期: 2023-09-27 17:59:12

我正在使用C#,并试图将一行插入SQL表中。我有以下代码。

    string spaceObjectName, RA, DEC;
    spaceObjectName = txtSpaceObject.Text;
    RA = txtRA.Text;
    DEC = txtDec.Text;
    adsJarvis.InsertParameters["spaceObjectName"].DefaultValue = txtSpaceObject.Text;
    adsJarvis.InsertParameters["RA"].DefaultValue = RA;
    adsJarvis.InsertParameters["DEC"].DefaultValue = DEC;
    try
    {
        adsJarvis.Insert();
        txtSpaceObject.Text = "";
        txtRA.Text = "";
        txtDec.Text = "";
    }
    catch(Exception ex)
    {
        lblStatus.Text = "A database error has occurred.  Message: " + ex.Message;
    }

我的问题出现在这条线上:

adsJarvis.InsertParameters["spaceObjectName"].DefaultValue = txtSpaceObject.Text;

不管出于什么原因,我得到了这个:

System.NullReferenceException:对象引用未设置为对象的实例。

我一辈子都搞不清楚为什么,因为我已经检查过了,而且我知道spaceObjectName不是null。有人能告诉我哪里出了问题吗?任何提示都将不胜感激!提前感谢!

C#System.NullReferenceException,即使已初始化

在您的代码段中,adsJarvis.InsertParameters["spaceObjectName"]当然是null,因为编译器正在寻找名为spaceObjectName的参数,这就是它抛出NullReferenceException的原因。你需要在aspx页面中引用它。

试试这个:

<asp:AccessDataSource ID="adsJarvis" runat="server" DataFile="~/App_Code/adbJarvisStars.accdb" 
    SelectCommand="SELECT * FROM [spaceObjectTable]" 
    InsertCommand="INSERT INTO spaceObjectTable( spaceObjectName, RA, DEC) VALUES (?, ?, ?)">
        <InsertParameters>
            <asp:Parameter Name="spaceObjectName" Type="string" />
            <asp:Parameter Name="RA" Type="string" />
            <asp:Parameter Name="DEC" Type="string" />
        </InsertParameters>
</asp:AccessDataSource>

所以在你身后的代码中可以:

adsJarvis.InsertParameters["spaceObjectName"].DefaultValue = ...;
....