初学者:数据主义者如何在asp.net/vb.net中工作?

时间:2009-10-02 19:49:32

标签: asp.net vb.net ado.net

我是asp.net的新手,我有一个关于数据主义者的一般性问题。 我能够让这个工作,但我不明白是怎么回事。 我想我需要有人给我这个“理论”。

首先我连接到数据库:

Dim MyConnection As SqlConnection
MyConnection = New SqlConnection("myconnectionstring=workingfine")
Dim DS As New DataSet
Dim MyCommand As New SqlDataAdapter("select * from thetable", MyConnection)
MyCommand.Fill(DS, "field1")
MyDataList.DataSource = DS.Tables("field1").DefaultView
MyDataList.DataBind()

然后我这样输出:

<form runat="server" id="form1">
<asp:datalist ID="MyDataList" runat="server">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"field1") %>
<%#DataBinder.Eval(Container.DataItem,"field2") %>
</ItemTemplate>
</asp:datalist>
</form>

以下是我的问题:
- 为什么datalist成功拉动field2? - 是MyCommand.Fill(DS,“field1”)和DS.Tables(“field1”)。DefaultView无意义?
- 我想我的底线问题是,如果我可以输出任何字段,为什么我必须在vb中指定字段?

我想我需要一些一般指导......

2 个答案:

答案 0 :(得分:1)

我用c#开发asp.net应用程序,我不得不使用VB一段时间,所以我可以对此有所了解。

首先,我很确定在你的SqlDataAdapter Fill方法中,它只是将所有数据放入名为“field1”的表中,该表位于DataSet中,名为“DS”:

MyCommand.Fill(DS, "field1") 
MyDataList.DataSource = DS.Tables("field1").DefaultView

然后你指示你的DataList使用DataSet'DS'中名为'field1'的表...

在您的标记中,您只需输出列,就会在代码隐藏中将您的表标记为“field1”,从而导致混淆。

尝试将表名从“field1”更改为类似“TestTable”...它应该仍然有用。

例如

MyCommand.Fill(DS, "TestTable")     
MyDataList.DataSource = DS.Tables("TestTable").DefaultView

请记住,在您背后的代码中,您定义了包含结果的表的名称,这可以被称为任何内容,它不是列名称 - 您希望输出的列在您的标记中决定...当您做得很好。

最后,DataSet可以保存表数据的多个结果:

MyCommand As New SqlDataAdapter("select * from employee", MyConnection)
MyCommand.Fill(DS, "EmployeeTable")

MyCommand As New SqlDataAdapter("select * from product", MyConnection)
MyCommand.Fill(DS, "ProductTable")

MyCommand As New SqlDataAdapter("select * from order", MyConnection)
MyCommand.Fill(DS, "OrderTable")

您的DataSet现在将有3个表格结果标记为“EmployeeTable”,“ProductTable”和“OrderTable”。

要将任何这些表分配给控件,您将使用以下内容:

MyDataList.DataSource = DS.Tables("ProductTable").DefaultView

答案 1 :(得分:1)

也许您的代码清晰可能有助于解释:

...
MyCommand.Fill(DS, "TABLENAME")
MyDataList.DataSource = DS.Tables("TABLENAME").DefaultView
...

回答Q#1:

  

为什么数据列表会拉动field2   成功?

在您的代码块中,您有“field1”,表名通常会这样,这可能会导致查看代码时出现混乱。数据列表正在正确地提取字段“field1”,因为它是一个字段和SQL查询。您的SQL是“select *”,我假设选择“field1”和“field2”作为查询的一部分。

回答Q2:

  

是MyCommand.Fill(DS,“field1”)   和DS.Tables(“field1”)。DefaultView   无意义?

“填充”方法是从数据库中提取数据并填充数据集。在您的代码中,您在参数中指定“field1”,实际上是表名。

将数据列表的数据源设置为DefaultView实际上是将数据主体绑定到数据集中的数据表而不是字段:

MyDataList.DataSource = DS.Tables("TABLENAME").DefaultView

回答问题3:

  

我想我的底线问题是,   为什么我必须在中指定字段   如果我可以输出任何字段?

您仍需要指定要输出到应用程序的字段。数据列表正在迭代数据表中的行,并要求您指定要输出到屏幕的每一行的列。