【问题标题】:How to fix this error "Object reference not set to an instance of an object"如何修复此错误“对象引用未设置为对象的实例”
【发布时间】:2019-10-07 08:17:30
【问题描述】:

“/”应用程序中的服务器错误。对象引用未设置为 对象的实例。描述:发生未处理的异常 在当前 Web 请求执行期间。请查看 堆栈跟踪以获取有关错误及其位置的更多信息 起源于代码。

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

来源错误:

Line 844:        Dim dt As New DataTable
Line 845:
Line 846:        format_type_id = Request.QueryString("ID").ToString.Trim
Line 847:
Line 848:        'take the value from db so easy to maintain the format name

堆栈跟踪:

[NullReferenceException: Object reference not set to an instance of an object.]
Doccon.ESER_Doc_Form.get_format_type() in C:\Users\naquid9065\Documents\Q SMTT\Doccon\Doccon\ESER-Doc-Form.aspx.vb:846
Doccon.ESER_Doc_Form.Page_Load(Object sender, EventArgs e) in C:\Users\naquid9065\Documents\Q SMTT\Doccon\Doccon\ESER-Doc-Form.aspx.vb:57
System.Web.UI.Control.OnLoad(EventArgs e) +95
System.Web.UI.Control.LoadRecursive() +59
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +678

代码:

Private Sub get_format_type()
    Dim strSQL As String = ""
    Dim params As New Hashtable
    Dim dt As New DataTable

    format_type_id = Request.QueryString("ID").ToString.Trim (error from here)

    strSQL = "SELECT * FROM tb_setup_format_type WHERE status ='1' and ID = @ID "
    params.Add("@ID", format_type_id)
    Common.OpenConn()
    Common.execReader(strSQL, params, dt, Common.txn)
    If dt.Rows.Count <> 0 Then
        Me.txtformat.Text = dt.Rows(0)("Report_Format").ToString.Trim
    End If

    Common.CloseConn()
End Sub

【问题讨论】:

  • 帮我解决这个问题..我是 asp.net 的新手。顺便说一句,我已经搜索 n 搜索并尝试.. 但都不起作用
  • 你了解什么是 NullReferenceException 吗?第一步是了解您收到的异常。 stackoverflow.com/questions/4660142/….
  • 请显示所有相关代码。
  • 现在您已经确定了错误的行。让我们设置一个断点并调试它。我猜,Request.QueryString("ID") 什么都没有。

标签: asp.net sql-server vb.net


【解决方案1】:

名为 Get... 的过程通常是函数。如果你得到了什么,那么它就会被退回。

如果您只需要一条数据,请不要拉下整条记录。您可以使用 ExecuteScalar 返回第一行的第一列。

直接使用 ADO.net 确实更容易。然后,您可以在本地跟踪您的数据对象,并确保即使出现错误它们也已关闭和处置。 Using...End Using 块实现了这一点。

    Private Sub FillFormatTextBox()
    Dim Format As Object = Nothing
    Dim strSQL = "SELECT Report_Format FROM tb_setup_format_type WHERE status ='1' and ID = @ID "
    Using cn As New SqlConnection("Your connection string")
        Using cmd As New SqlCommand(strSQL, cn)
            'Your code did not provide a value for the Id parameter
            cmd.Parameters.Add("@ID", SqlDbType.Int).Value = 4
            cn.Open()
            Format = cmd.ExecuteScalar()
        End Using
    End Using
    If Format Is Nothing Then
        MessageBox.Show("No format Found")
    Else
        txtformat.Text = Format.ToString.Trim
    End If
End Sub

【讨论】:

  • 如果什么都不返回怎么办,cmd.ExecuteScalar() 不是什么都没有吗?导致相同的 NullRefEx?在您的代码中,我可以将Format(使用不同的名称)声明为对象,将其初始化为空,将其设置为cmd.ExecuteScalar()(没有 ToString.Trim),然后在尝试调用 .ToString 方法之前对其进行测试跨度>
  • 因此,如果cmd.ExecuteScalar() 什么都不是,您不会使用 .ToString 方法获得异常吗? cmd.ExecuteScalar().ToString
  • @Mr.Tripodi 在我发布更正后立即看到了这一点。你觉得我现在有吗?
  • 是的,我就是这样做的。
  • 我需要显示的 id 调用的所有数据,但出现错误
猜你喜欢
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 2023-01-30
  • 2011-07-09
  • 2012-08-31
  • 2011-11-21
相关资源
最近更新 更多