【问题标题】:ASP.net datatable is returning no valuesASP.net 数据表不返回任何值
【发布时间】:2015-02-24 10:23:05
【问题描述】:

我希望你能帮助解决我的问题。我正在尝试使用数据表从我的数据库中填写表格。一切似乎都很好,但我没有返回任何数据。谁能解释为什么?我查看了调试,似乎没有错误,而且看起来没有任何错误。这是我背后的代码(vb.net)

Imports System.Data
Imports System.Data.SqlClient
Imports System.Net.Mail

Partial Class _Default
Inherits System.Web.UI.Page

Private Sub getData(ByVal user As String)
    Dim dt As New DataTable()
    Dim constr As String = ConfigurationManager.ConnectionStrings("conn").ConnectionString
    Dim connection As New SqlConnection(constr)
    connection.Open()
    Dim sqlCmd As New SqlCommand("SELECT * from tblContent WHERE CID = @ID", connection)
    Dim sqlDa As New SqlDataAdapter(sqlCmd)

    sqlCmd.Parameters.AddWithValue("@ID", Request.QueryString("ID"))
    sqlDa.Fill(dt)
    If dt.Rows.Count > 0 Then
        ID.Text = dt.Rows(0)("CID").ToString
        TextBox2.Text = dt.Rows(0)("Heading").ToString
        TextBox1.Text = dt.Rows(0)("ContText").ToString
        Label2.Text = dt.Rows(0)("Location").ToString
    End If
    connection.Close()
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    If Not Page.IsPostBack Then
        getData(Me.User.Identity.Name)
    End If
End Sub

表示层:

<h2><asp:Label ID="Label2" runat="server" Text=""></asp:Label></h2>
<asp:TextBox ID="ID" runat="server" Visible="false">    </asp:TextBox><br />

<asp:Label ID="Label3" runat="server" Text="Heading" CssClass="label"></asp:Label>  
<asp:TextBox ID="TextBox2" TextMode="SingleLine" Text="" runat="server"></asp:TextBox><br />
<asp:Label ID="Label1" runat="server" Text="Content" CssClass="label"></asp:Label><br />     
<asp:TextBox ID="TextBox1" TextMode="MultiLine" runat="server"></asp:TextBox>            

我通过查询字符串从另一个页面传递 ID(例如 ID=5)。我的数据库中有数据,所有标签/文本框都有正确的 ID 等。我只能看到有什么问题?

谢谢!

【问题讨论】:

  • “所有标签/文本框都有正确的 ID 等” 那么怎么了?你用过调试器吗?顺便说一句,您应该使用Using-statement 进行连接和数据适配器。它确保连接关闭,即使出现错误。此外,方法应以大写字母开头,如果它们不返回任何内容,则不应以 Get 开头。
  • 嗨蒂姆 - 没有返回数据来填充文本框/标签。我尝试了调试器,但没有错误。你有你提到的使用语句的例子吗?谢谢!
  • 你能把分析器放到 SQL server 来检查它是否到达那里吗?
  • 对于新的 SqlCommand 放 Commandtype.Text
  • 嗨,阿米特。你是什​​么意思分析器?我不确定我以前是否使用过它?我在不同的页面上使用了相同的连接字符串,并且工作正常。谢谢

标签: asp.net vb.net datatable


【解决方案1】:

您可以尝试传递正确的类型而不是字符串:

Using sqlDa As New SqlDataAdapter(sqlCmd)
    Dim idParam = new SqlParameter("@ID", SqlDbType.Int)
    Dim id As Int32
    If Not Int32.TryParse(Request.QueryString("ID"), id) Then Throw New Exception("Not a valid ID-parameter!")
    idParam.Value = id
    sqlDa.SelectCommand.Parameters.Add(idParam)
    sqlDa.Fill(dt)
End Using

顺便说一句,也可以使用Using-statement 进行连接。顺便说一句,您不需要打开/关闭与SqlDataAdapter.Fill(table) 的连接,因为这是自动完成的。

【讨论】:

  • 感谢您抽出宝贵时间并回复查看此蒂姆。不幸的是,它似乎仍然没有提取任何数据。我已经在 Visual Studio 和 chrome 中对其进行了调试,但两者都没有显示错误,只是一个没有数据的空白表单。我发现奇怪的是我尝试了一个 ID 为 'abc' (?ID=abc) 并且没有显示错误?我想它应该有某个地方,因为它不是 int 类型。我是在调试这个错误还是视觉工作室在告诉我谎言?谢谢
  • @BenWilliams:听起来你好像没有真正使用过调试器。在这个方法中设置一个断点,看看每一行发生了什么。如果查询字符串 id 是“abc”,您显然会得到我在上面抛出的异常。所以要么这个方法没有被执行,要么你没有注意到异常发生了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 2021-12-13
  • 2016-12-06
  • 2011-04-04
  • 2015-06-09
  • 1970-01-01
相关资源
最近更新 更多