【问题标题】:Dataset is NULL after clicking form button单击表单按钮后数据集为 NULL
【发布时间】:2018-06-23 02:56:08
【问题描述】:

点击表单按钮后数据集为NULL。

我想学习和理解 Visual Basic 2017。 在测试网络表单上,一些文本框填充有数据集 (DS) 项目(在页面加载期间)。 这很好用,没有问题。

表单上还有一个保存按钮,单击后必须用数据集项填充文本框。 但随后 dataaet 似乎为 NULL。 这怎么可能? 我希望有人能告诉我出了什么问题,我知道数据集在运行时会保持 dukkws。

点击保存按钮后出现此错误:======================================= === System.NullReferenceException:对象引用未设置为对象的实例。 在 S:\P2 S VS tests\NW DB 中的 NW_DB_update_test.NWtest.testDS()

更新测试\NW DB 更新测试\NWtest.aspx.vb:line 46

VB的源是====================================

选项显式打开 选项严格开启

导入 System.Data.SqlClient

公开课 NWtest 继承 System.Web.UI.Page

Public DA As SqlDataAdapter
Public DS As System.Data.DataSet
Public CB As SqlCommandBuilder

Public Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        Call GETNWDS()
        Call testDS()
    End If
End Sub

Public Sub GETNWDS()
    '' opencustumorDataAdapterdaaset DS

    Dim connectionString = ConfigurationManager.ConnectionStrings("NW testConnectionString").ConnectionString
    Dim queryString As String = "SELECT CustomerID, CompanyName, ContactName FROM Customers where CustomerID='ALFKI'"

    Dim conn As New SqlConnection(connectionString)
    DA = New SqlDataAdapter(queryString, conn)
    DS = New System.Data.DataSet
    DA.Fill(DS)

    CustomerIDbox.Text = DS.Tables(0).Rows(0).Item("CustomerID").ToString
    CompanyNamebox.Text = DS.Tables(0).Rows(0).Item("CompanyName").ToString
    ContactNamebox.Text = DS.Tables(0).Rows(0).Item("ContactName").ToString

End Sub

Public Sub testDS()
    Try
        Dim v As String
        v = "in DS= " + DS.Tables(0).Rows(0).Item("ContactName").ToString
        Textbox.Text = v

        'Error after clicking the save button:
        '   System.NullReferenceException
        '   Object reference Not set to an instance of an object.  
        '   at NW_DB_update_test.NWtest.testDS() in S: \P2 S VS tests\NW DB update test\NW DB update test\NWtest.aspx.vb:line 46


    Catch x As Exception
        Textbox.Text = x.ToString
    End Try

End Sub

结束类

================================================ ==========================================

【问题讨论】:

  • 这是因为此时 DS 中没有任何数据。在 Web 上下文中,对服务器的每个请求(页面加载、按钮单击等)都会导致 C# 脚本的全新执行。变量的值不会在请求之间保持不变,您不能像使用桌面应用程序那样从中断的地方继续。在进一步深入之前,请阅读 ASP.NET 页面的页面生命周期(它甚至比其他 Web 技术更奇特)。 MS 有关于它的文章。
  • “在 Web 上下文中,对服务器的每个请求(页面加载、按钮单击等)都会导致 C# 脚本的全新执行。”这是否意味着在 C# 中 DS 会自动重新填充?这是 VB 里的娘炮吗?
  • VB/C# 没有区别。不,我的意思恰恰相反,它不会自动重新填充,这就是你的变量为空的原因。顺便说一句,回发时运行什么代码?据我所知,上述代码都不会在回发时运行(即单击您的按钮时),除非您已通过您的 aspx 代码将这些 Subs 之一绑定到按钮?您是否实际显示了发生错误的代码?你能告诉我们按钮吗?它绑定到什么事件处理程序?
  • 问题解决了。感谢您对刷新 DS 的评论,我才知道为什么 DS 没有更新,原因是“If Not IsPostBack Then”这行写错了地方。这对我来说非常愚蠢,我不知道刷新。现在更新数据库工作正常。非常感谢您的努力和提示。

标签: asp.net vb.net dataset


【解决方案1】:

我不确定您要实现什么,但正如 ADyson 解释的那样,您在页面加载时声明的变量在回发后不存在。另一方面,如果您只是想阅读ContactName,您可以直接从它写入的文本框中获取它,因为如果没有另外说明,控件确实会在回发之间持续存在。

Textbox.Text=ContactNamebox.Text

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多