C# 如何使数据集返回两个相关的表?
我使用的是C++.NET3.5+VSTS2008+ADO.Net+SQLServer2008。我在SQLServer中有两个相关的表(外键关系)。我想将这两个表作为数据集中的两个数据表加载。有没有参考代码可以这样做 提前感谢,, 乔治试试这个C# 如何使数据集返回两个相关的表?,c#,.net,sql-server-2008,ado.net,C#,.net,Sql Server 2008,Ado.net,我使用的是C++.NET3.5+VSTS2008+ADO.Net+SQLServer2008。我在SQLServer中有两个相关的表(外键关系)。我想将这两个表作为数据集中的两个数据表加载。有没有参考代码可以这样做 提前感谢,, 乔治试试这个 Dim myAdapter as SqlDataAdapter = new SqlDataAdapter( “SELECT * FROM Customers; SELECT * FROM Orders“, connection) myAdap
Dim myAdapter as SqlDataAdapter = new SqlDataAdapter(
“SELECT * FROM Customers; SELECT * FROM Orders“, connection)
myAdapter.Fill(dsTables)
dsTables.Tables(0).TableName = “Customers“)
dsTables.Tables(1).TableName = “Orders“)
试试这个
Dim myAdapter as SqlDataAdapter = new SqlDataAdapter(
“SELECT * FROM Customers; SELECT * FROM Orders“, connection)
myAdapter.Fill(dsTables)
dsTables.Tables(0).TableName = “Customers“)
dsTables.Tables(1).TableName = “Orders“)
乔治
您能澄清一下您的问题吗?是关于填写数据集中的多个表,还是只填写特定的实数表
关于加载多个表,您可以参考以下代码(此代码可在MSDN上查看):
static void Main()
{
数据集=新数据集();
DataTable customerTable=新DataTable();
DataTable productTable=新DataTable();
//此信息仅为表面信息。
customerTable.TableName=“客户”;
productTable.TableName=“产品”;
//将表添加到数据集:
dataSet.Tables.Add(customerTable);
dataSet.Tables.Add(productTable);
//将数据加载到现有数据集中。
DataTableReader=GetReader();
dataSet.Load(读卡器,LoadOption.OverwriteChanges,
客户表、产品表);
//打印出每个表格的内容:
foreach(dataSet.Tables中的DataTable表)
{
打印列(表);
}
Console.WriteLine(“按任意键继续”);
Console.ReadKey();
}
私有静态数据表GetCustomers()
{
//创建示例客户表。
DataTable=新的DataTable();
table.TableName=“客户”;
//创建两列,ID和Name。
DataColumn-idColumn=table.Columns.Add(“ID”,typeof(int));
表.列.添加(“名称”,类型(字符串));
//将ID列设置为主键列。
table.PrimaryKey=newdatacolumn[]{idColumn};
Add(新对象[]{0,“Mary”});
Add(新对象[]{1,“Andy”});
table.Rows.Add(新对象[]{2,“Peter”});
表.AcceptChanges();
返回表;
}
私有静态数据表GetProducts()
{
//创建示例产品表。
DataTable=新的DataTable();
table.TableName=“产品”;
//创建两列,ID和Name。
DataColumn idColumn=table.Columns.Add(“ID”,
类型(int));
表.列.添加(“名称”,类型(字符串));
//将ID列设置为主键列。
table.PrimaryKey=newdatacolumn[]{idColumn};
table.Rows.Add(新对象[]{0,“无线网卡”});
添加(新对象[]{1,“硬盘”});
添加(新对象[]{2,“监视器”});
Add(新对象[]{3,“CPU”});
表.AcceptChanges();
返回表;
}
私有静态void打印列(数据表)
{
Console.WriteLine();
Console.WriteLine(table.TableName);
Console.WriteLine(“===========================================”);
//循环浏览表中的所有行:
foreach(table.Rows中的DataRow行)
{
for(int i=0;i
下面是用于管理数据集中的父子关系的代码
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Public Class DataRelation
Inherits System.Web.UI.Page
Protected lblDisplay As System.Web.UI.WebControls.Label
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim objConn As SqlConnection
Dim da As SqlDataAdapter
Dim ds As DataSet
Dim dtrParent As DataRow
Dim dtrChild As DataRow
objConn = New SqlConnection(ConfigurationSettings.Appsettings("NorthwindConnection"))
da = New SqlDataAdapter("SELECT * FROM Categories", objConn)
ds = New DataSet()
Try
objConn.Open()
da.Fill( ds,"Categories")
da.SelectCommand = New SqlCommand("SELECT * FROM Products", objConn)
da.Fill(ds, "Products")
Catch exc As SqlException
Response.Write(exc.ToString())
Finally
objConn.Dispose()
End Try
'Create the Data Relationship
ds.Relations.Add("Cat_Prod",ds.Tables("Categories").Columns("CategoryID"), _
ds.Tables("Products").Columns("CategoryID"))
'Display the Category and Child Products Within
For each dtrParent in ds.Tables("Categories").Rows
lblDisplay.Text &= "<h3>" & dtrParent("CategoryName") & "</h3><ul>"
For each dtrChild in dtrParent.GetChildRows("Cat_Prod")
lblDisplay.Text &= "<li>" & dtrChild("ProductName") & "</li>"
Next
lblDisplay.Text &= "</ul>"
Next
End Sub
End Class
导入系统数据
导入System.Data.SqlClient
导入系统配置
公共类数据关系
继承System.Web.UI.Page
受保护的LBL显示为System.Web.UI.WebControl.Label
私有子页_Load(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理MyBase.Load
Dim objConn作为SqlConnection
Dim da作为SqlDataAdapter
Dim ds作为数据集
Dim DTR不作为数据行
将dtrChild设置为数据行
objConn=newsqlconnection(ConfigurationSettings.Appsettings(“NorthwindConnection”))
da=新的SqlDataAdapter(“从类别中选择*”,objConn)
ds=新数据集()
尝试
objConn.Open()
da.填充(ds,“类别”)
da.SelectCommand=New-SqlCommand(“从产品中选择*”,objConn)
da.填充(ds,“产品”)
捕获exc作为SqlException
Response.Write(exc.ToString())
最后
objConn.Dispose()
结束尝试
'创建数据关系
ds.Relations.Add(“目录产品”,ds.Tables(“类别”).列(“类别ID”)_
ds.表格(“产品”).列(“类别ID”))
'在中显示类别和子产品
对于ds.Tables(“Categories”)行中的每个dtrParent
lblDisplay.Text&=“dtrParent”(“CategoryName”)和“”
对于dtrParent.GetChildRows(“Cat_Prod”)中的每个dtrChild
lblDisplay.Text&=“- ”&dtrChild(“产品名称”)和“
”
下一个
lblDisplay.Text&=“
”
下一个
端接头
末级
你可以在George上找到进一步的解释
您能澄清一下您的问题吗?是关于填写数据集中的多个表,还是只填写特定的实数表
关于加载多个表,您可以参考以下代码(此代码可在MSDN上查看):
static void Main()
{
数据集=新数据集();
DataTable customerTable=新DataTable();
DataTable productTable=新DataTable();
//此信息仅为表面信息。
customerTable.TableName=“客户”;
productTable.TableName=“产品”;
//将表添加到数据集:
dataSet.Tables.Add(customerTable);
dataSet.Tables.Add(productTable);
//将数据加载到现有数据集中。
DataTableReader=GetReader();
dataSet.Load(读卡器,LoadOption.OverwriteChanges,
客户表、产品表);
//打印出每个表格的内容:
foreach(dataSet.Tables中的DataTable表)
{
PrintCol
var query = dc.GetTable<Media>().Where(s => s.MediaID == new Guid("A72AA79A-6C40-4D6B-A826-241553FECDFE"));
var query1 = dc.GetTable<MediaVersion>().Where(s => s.MediaID == new Guid("A72AA79A-6C40-4D6B-A826-241553FECDFE"));
var query2 = dc.GetTable<RootPath>().Where(s => s.RootPathID == new Guid("62145B2C-BA36-4313-8CA2-0F224F8FE7E8"));
SqlCommand cmd = dc.GetCommand(query) as SqlCommand;
//Load first
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds, "Media");
//Load second
cmd = dc.GetCommand(query1) as SqlCommand;
ada.SelectCommand = cmd;
ada.Fill(ds, "MediaVersion");
ds.Relations.Add("Med_MedVer", ds.Tables["Media"].Columns["MediaID"],
ds.Tables["MediaVersion"].Columns["MediaID"]);
//Load third independent table
cmd = dc.GetCommand(query2) as SqlCommand;
ada.SelectCommand = cmd;
ada.Fill(ds, "RootPath");