我是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中指定字段?
我想我需要一些一般指导......
答案 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:
我想我的底线问题是, 为什么我必须在中指定字段 如果我可以输出任何字段?
您仍需要指定要输出到应用程序的字段。数据列表正在迭代数据表中的行,并要求您指定要输出到屏幕的每一行的列。