C#System.NullReferenceException即使已初始化

时间:2014-04-22 01:51:13

标签: c# nullreferenceexception

我正在使用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。 谁能告诉我哪里出错了?任何提示将不胜感激!提前谢谢!

1 个答案:

答案 0 :(得分:0)

在你的代码片段中,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 = ...;
....