插入&更新代码在ASP.NET中不起作用

时间:2012-04-24 07:04:33

标签: c# asp.net

从gridview将数据插入/更新到sql server数据库时,我收到“对象引用未设置为对象的实例”错误。有人请帮忙。

protected void GridAllStore_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        storelocatorDataSetTableAdapters.storedbTableAdapter tastoreInsert = new storelocatorDataSetTableAdapters.storedbTableAdapter();
        if (e.CommandName.Equals("Insert"))
        {
            TextBox txtNewName = new TextBox();
            TextBox txtNewContact = new TextBox();
            TextBox txtNewAddress = new TextBox();
            txtNewName = (TextBox)GridAllStore.FooterRow.FindControl("txtNewName");
            txtNewContact = (TextBox)GridAllStore.FooterRow.FindControl("txtNewContact");
            txtNewAddress = (TextBox)GridAllStore.FooterRow.FindControl("txtNewAddress");
            tastore.Insert(txtNewName.Text, txtNewContact.Text, txtNewAddress.Text);    
            FillGrid();          
        }
    }

以下是错误消息:

  

对象引用未设置为对象的实例。

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

     

来源错误:

     

第107行:txtNewContact =(TextBox)GridAllStore.FooterRow.FindControl(“txtNewContact”);
  第108行:txtNewAddress =(TextBox)GridAllStore.FooterRow.FindControl(“txtNewAddress”);
  第109行:tastore.Insert(txtNewName.Text,txtNewContact.Text,txtNewAddress.Text);
  第110行:FillGrid();
  第111行:}

     

源文件:C:\ Users \ DELL \ Documents \ Visual Studio 2010 \ Projects \ WebApplication1 \ WebApplication1 \ AdminPanel.aspx.cs Line:109

3 个答案:

答案 0 :(得分:1)

错误消息表示第109行中的tastorenull,因此需要初始化tastore。您通过在函数标题中编写tastoreInsert并在正文中编写tastore.Insert来混淆自己。

编辑:抱歉,这也可能意味着三个文本框中的任何一个都不存在。如果找不到控件,FindControl将返回null,因此您还需要查看它们。调试!

答案 1 :(得分:1)

FindControl可以返回null,当你访问Text属性时会抛出null对象异常。您可以在访问Text属性之前检查null。

        var txtNewNameTb = (TextBox)GridAllStore.FooterRow.FindControl("txtNewName");
        var txtNewContactTb = (TextBox)GridAllStore.FooterRow.FindControl("txtNewContact");
        var txtNewAddressTb = (TextBox)GridAllStore.FooterRow.FindControl("txtNewAddress");

        if (txtNewNameTb == null || txtNewContactTb == null || txtNewAddressTb  == null) { return; }

        if(tastore == null)  { return; }

        tastore.Insert(txtNewNameTb.Text, txtNewContactTb.Text, txtNewAddressTb.Text);    

        FillGrid();          

在你的ASPX FooterTemplate中应该有3个文本框,如下所示。

<FooterTemplate> 
<asp:TextBox ID="txtNewName" runat="server" >
</asp:TextBox> 
<asp:TextBox ID="txtNewContact" runat="server" >
</asp:TextBox> 
<asp:TextBox ID="txtNewAddress" runat="server" >
</asp:TextBox> 
</FooterTemplate> 

答案 2 :(得分:0)

使用Convert.ToString(txtNewNameTb.Text)
它会自动将NULL转换为空字符串。

尝试: -

tastore.Insert(Convert.ToString(txtNewName.Text),Convert.ToString( txtNewContact.Text), Convert.ToString(txtNewAddress.Text));