2015-02-24 65 views
0

我希望你能帮助我的问题。我试图用数据表从我的数据库中填写表单。所有似乎工作正常,但我没有得到任何数据返回。谁能解释为什么?我看了调试,似乎没有错误,没有看起来像失败。这里的背后我的代码(vb.net)ASP.net datatable返回没有值

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等。我只能看到有什么问题?

谢谢!

+0

_“所有标签/文本框都有正确的ID等”_所以出了什么问题?你用过调试器吗?另外,您应该为连接和数据适配器使用'Using'语句。它确保连接关闭,即使出错。另外,方法应该以大写字母开始,如果它们不返回任何东西,它们不应该用'Get'开头。 – 2015-02-24 10:25:07

+0

嗨蒂姆 - 没有数据返回填充文本框/标签。我试过调试器,但没有错误。你有没有你提到的使用陈述的例子?谢谢! – 2015-02-24 10:29:21

+0

你可以把分析器到SQL服务器来检查它是否到达那里? – Amit 2015-02-24 11:04:07

回答

2

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

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语句来进行连接。顺便说一句,您不需要打开/关闭与SqlDataAdapter.Fill(table)的连接,因为这是自动完成的。

+0

感谢您的时间和答复看看这Tim。不幸的是,它似乎还没有通过任何数据。我在visual studio和chrome中调试过它,但都没有显示错误,只是一个没有数据的空白表单。我发现奇怪的是,我尝试了一个ID为'abc'(?ID = abc)并且没有显示错误?我猜它应该有一个地方,因为它不是一个int类型。我是调试这个错误还是视觉工作室告诉我谎言?谢谢 – 2015-02-24 11:01:22

+0

@BenWilliams:听起来好像你真的使用过调试器。在这个方法中设置一个断点,看看每一行发生了什么。如果查询字符串ID是“abc”,那么您显然会得到上面抛出的异常。所以这个方法不会被执行,或者你没有注意到异常发生了。 – 2015-02-24 11:07:54