当我尝试将数据从文本框插入到SqlDataSource时,它会给我错误的“对象引用未设置为对象的实例”

本文关键字:错误 对象引用 设置 实例 对象 数据 文本 SqlDataSource 插入 | 更新日期: 2023-09-27 18:11:40

protected void btnInsert_Click(object sender, EventArgs e)
{
            string custName = ddlCustomerName.SelectedValue;
            string listing = ddlListing.SelectedValue;
            sdsCustomers.InsertParameters["@CustomerID"].DefaultValue = sdsCustomerName.SelectParameters["CustomerID"].DefaultValue;
            sdsCustomers.InsertParameters["ListingID"].DefaultValue = sdsCustomerName.SelectParameters[listing].DefaultValue;
            sdsCustomers.InsertParameters["FullName"].DefaultValue = custName;
            sdsCustomers.InsertParameters["Date"].DefaultValue = txtBxDate.ToString();
            sdsCustomers.InsertParameters["Reason"].DefaultValue = ddlReason.SelectedValue;
            sdsCustomers.InsertParameters["BidPrice"].DefaultValue = txtBxBidPrice.Text;
            sdsCustomers.InsertParameters["CommissionRate"].DefaultValue = txtBxDate.Text;
            sdsCustomers.Insert();
}

你能告诉我我哪里做错了吗?

SELECT
   CustAgentList.AgentID, CustAgentList.CustomerID, 
   Customers.LastName + ', ' + Customers.FirstName AS FullName, 
   CAST(CustAgentList.ListingID AS VARCHAR) + ', ' + Customers.Address + ', ' + Customers.City AS Listing, 
   CustAgentList.ContactDate AS Date, CustAgentList.BidPrice, 
   CustAgentList.CommissionRate, ContactReason.ContactReason AS Reason 
FROM 
   CustAgentList 
INNER JOIN 
   Customers ON CustAgentList.CustomerID = Customers.CustomerID 
INNER JOIN 
   ContactReason ON CustAgentList.ContactReason = ContactReason.ContactReason 
WHERE 
   (CustAgentList.AgentID = @AgentID) 
ORDER BY 
   Date

这是我的sdsCustomer insertCommand。使用此SqlDataSource的datagridview填充得很好。

当我尝试将数据从文本框插入到SqlDataSource时,它会给我错误的“对象引用未设置为对象的实例”

您正在使用的控件之一可能返回null。在null上调用方法或访问属性会产生NullReferenceException,将null传递给许多方法也是如此。

如果可以调试页面,只需在btnInsert_Click的第一行设置一个断点,并检查赋值右侧的值,以可能找到罪魁祸首。

或者获取异常的堆栈跟踪。还有其他方法可以做到这一点,但请尝试在事件处理程序的修改版本中设置断点,以便调试,如下所示:

protected void btnInsert_Click(object sender, EventArgs e)
{
    try { // FORNOW: for debugging
        string custName = ddlCustomerName.SelectedValue;
        string listing = ddlListing.SelectedValue;
        sdsCustomers.InsertParameters["@CustomerID"].DefaultValue = sdsCustomerName.SelectParameters["CustomerID"].DefaultValue;
        sdsCustomers.InsertParameters["ListingID"].DefaultValue = sdsCustomerName.SelectParameters[listing].DefaultValue;
        sdsCustomers.InsertParameters["FullName"].DefaultValue = custName;
        sdsCustomers.InsertParameters["Date"].DefaultValue = txtBxDate.ToString();
        sdsCustomers.InsertParameters["Reason"].DefaultValue = ddlReason.SelectedValue;
        sdsCustomers.InsertParameters["BidPrice"].DefaultValue = txtBxBidPrice.Text;
        sdsCustomers.InsertParameters["CommissionRate"].DefaultValue = txtBxDate.Text;
        sdsCustomers.Insert();
    }
    catch (Exception ex) { // FORNOW: for debugging
          var exDetails = ex.ToString();
          ; // Set a breakpoint here, and inspect the value of exDetails.
    }
}