SqlDataAdapter cmd = new SqlDataAdapter(strSql, objcon);
SqlDataAdapter cmd2 = new SqlDataAdapter(strSql2, objcon);//创建表
DataSet ds = new DataSet();
DataTable ts1 = new DataTable();
//ts1创建列,并赋列名
DataColumn keyid1=new DataColumn();
keyid1.ColumnName="keyid1";
keyid1.DataType=System.Type.GetType("System.Int32");
ts1.Columns.Add(keyid1);
DataColumn testtxt1=new DataColumn();
testtxt1.ColumnName="testtxt1";
testtxt1.DataType=System.Type.GetType("System.String");
ts1.Columns.Add(testtxt1);
//ts2表
DataTable ts2 = new DataTable();
DataColumn keyid2=new DataColumn();
keyid2.ColumnName="keyid2";
keyid2.DataType=System.Type.GetType("System.Int16");
ts2.Columns.Add(keyid2);
DataColumn testtxt2=new DataColumn();
testtxt2.ColumnName="testtxt2";
testtxt2.DataType=System.Type.GetType("System.String");
ts2.Columns.Add(testtxt2);
//放入dataset
ds.Tables.Add(ts1);
ds.Tables.Add(ts2);
//将数据库中的两个表填充给ds中的ts1与ts2表
cmd.Fill(ds, "ts1");
cmd2.Fill(ds, "ts2");
//准备建立关系
DataColumn tt1, tt2;//问题就在此处,使用column名,则提示需要new,很奇怪,按书上写的还出错!
//tt1 = ds.Tables["ts1"].Columns["keyid1"];
//tt2 = ds.Tables["ts2"].Columns["keyid2"];
//使用下面的索引则一切正常!
tt1 = ds.Tables["ts1"].Columns[0];
tt2 = ds.Tables["ts2"].Columns[0];
DataRelation testr;
testr = new DataRelation("TabGX", tt1, tt2);
ds.Relations.Add(testr);
foreach (DataRow theTabGx in ds.Tables["ts2"].Rows)
{
DataRow[] parents = theTabGx.GetParentRows("TabGX");
foreach (DataRow theTabGX1 in parents)
{
//此处问题相同,不能使用名称,只能使用索引!
Response.Write(theTabGx[1]);
Response.Write(theTabGX1[1]);
Response.Write("<br>");
}
}-----------------------------------------------------
请高手指点.费心了!
SqlDataAdapter cmd2 = new SqlDataAdapter(strSql2, objcon);//创建表
DataSet ds = new DataSet();
DataTable ts1 = new DataTable();
//ts1创建列,并赋列名
DataColumn keyid1=new DataColumn();
keyid1.ColumnName="keyid1";
keyid1.DataType=System.Type.GetType("System.Int32");
ts1.Columns.Add(keyid1);
DataColumn testtxt1=new DataColumn();
testtxt1.ColumnName="testtxt1";
testtxt1.DataType=System.Type.GetType("System.String");
ts1.Columns.Add(testtxt1);
//ts2表
DataTable ts2 = new DataTable();
DataColumn keyid2=new DataColumn();
keyid2.ColumnName="keyid2";
keyid2.DataType=System.Type.GetType("System.Int16");
ts2.Columns.Add(keyid2);
DataColumn testtxt2=new DataColumn();
testtxt2.ColumnName="testtxt2";
testtxt2.DataType=System.Type.GetType("System.String");
ts2.Columns.Add(testtxt2);
//放入dataset
ds.Tables.Add(ts1);
ds.Tables.Add(ts2);
//将数据库中的两个表填充给ds中的ts1与ts2表
cmd.Fill(ds, "ts1");
cmd2.Fill(ds, "ts2");
//准备建立关系
DataColumn tt1, tt2;//问题就在此处,使用column名,则提示需要new,很奇怪,按书上写的还出错!
//tt1 = ds.Tables["ts1"].Columns["keyid1"];
//tt2 = ds.Tables["ts2"].Columns["keyid2"];
//使用下面的索引则一切正常!
tt1 = ds.Tables["ts1"].Columns[0];
tt2 = ds.Tables["ts2"].Columns[0];
DataRelation testr;
testr = new DataRelation("TabGX", tt1, tt2);
ds.Relations.Add(testr);
foreach (DataRow theTabGx in ds.Tables["ts2"].Rows)
{
DataRow[] parents = theTabGx.GetParentRows("TabGX");
foreach (DataRow theTabGX1 in parents)
{
//此处问题相同,不能使用名称,只能使用索引!
Response.Write(theTabGx[1]);
Response.Write(theTabGX1[1]);
Response.Write("<br>");
}
}-----------------------------------------------------
请高手指点.费心了!
解决方案 »
- 关于数组时间处理的
- ‘=’附近有语法错误
- C# textchanged 事件 光标在文本前面怎么能放到后面
- winform 下 listbox.items.add(文本,值) 如何实现?
- 关于socket连接超时的问题,能不能设置超时?
- 【DataGrid问题】求关于DataGrid上直接添加、删除、修改并显示的代码
- 请问在datagridboolcolumn中怎么样把第三个状态DBNull去掉? 谢谢!
- 我想开发一个软件,可以画很多框框和箭头,然后在框框里填图象和文字,然后可以保存起来,需要什么准备知识?界面要用哪些控件好?(详)
- 何如用用c#做登陆界面?
- C#开发的WebService和ASP.NET开发的WebService有什么不同?
- 关于SQL防注入
- 请教各位神上~~如何给动态添加的控件指定父容器啊
直接DateSet set = new DateSet();
set.dateScroue = "绑定的数据";
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
DataRelation dsdr = new DataRelation("Position", ds.Tables[0].Columns["id"], ds.Tables[1].Columns["id"]);
ds.Relations.Add(dsdr);
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
DataRelation dsdr = new DataRelation("Position", ds.Tables[0].Columns["id"], ds.Tables[1].Columns["id"]);
ds.Relations.Add(dsdr);
==================================================================
高手麻烦看一下我的码....我就是在这个DataRelation dsdr = new DataRelation("Position", ds.Tables[0].Columns["id"], ds.Tables[1].Columns["id"]); 地方出问题...无法使用ds.Tables[0].Columns["id"]
用ds.Tables[0].Columns[0]就整个没有问题!也就是说调用ds.Tables[0].Columns["列名"]提示出错,但调用ds.Tables[0].Columns[索引号]则没有问题!
SqlDataAdapter cmd2 = new SqlDataAdapter(strSql2, objcon);//创建表
DataSet ds = new DataSet();
/* --------- 试着把这以后的内容去掉 ------------- * DataTable ts1 = new DataTable();
//ts1创建列,并赋列名
DataColumn keyid1=new DataColumn();
keyid1.ColumnName="keyid1";
keyid1.DataType=System.Type.GetType("System.Int32");
ts1.Columns.Add(keyid1);
DataColumn testtxt1=new DataColumn();
testtxt1.ColumnName="testtxt1";
testtxt1.DataType=System.Type.GetType("System.String");
ts1.Columns.Add(testtxt1);
//ts2表
DataTable ts2 = new DataTable();
DataColumn keyid2=new DataColumn();
keyid2.ColumnName="keyid2";
keyid2.DataType=System.Type.GetType("System.Int16");
ts2.Columns.Add(keyid2);
DataColumn testtxt2=new DataColumn();
testtxt2.ColumnName="testtxt2";
testtxt2.DataType=System.Type.GetType("System.String");
ts2.Columns.Add(testtxt2);
//放入dataset
ds.Tables.Add(ts1);
ds.Tables.Add(ts2); * --------- 试着把这以上的内容去掉 ------------- */
//将数据库中的两个表填充给ds中的ts1与ts2表
cmd.Fill(ds, "ts1"); // <--- 我的理解是填充时自动生成 ts1,
cmd2.Fill(ds, "ts2"); // <--- 和 ts2,并不需要按上面那样手动生成。
// 列名也不是 keyid1、keyid2 之类,而是数据库中的字段名。
我用数据库字段名试了..也不行!真搞不清原因了..还要等熟悉这块的朋友来指点了!
SqlDataAdapter cmd2 = new SqlDataAdapter(strSql2, objcon);//创建表
DataSet ds = new DataSet();
将中间那块去掉,直接用
cmd.Fill(ds, "ts1");
cmd2.Fill(ds, "ts2");
DataColumn tt1, tt2;
tt1 = ds.Tables["ts1"].Columns[0];
tt2 = ds.Tables["ts2"].Columns[0];
DataRelation testr;
testr = new DataRelation("TabGX", tt1, tt2);
ds.Relations.Add(testr);
这样去运行...仍然正确,可以得到结果!但怎么样才能调到Columns["列名"]呢?书上写着是这样调的!
using System;
using System.Data;class Program
{
static void Main()
{
DataTable ts1 = new DataTable();
DataColumn keyid1=new DataColumn();
keyid1.ColumnName="keyid1";
keyid1.DataType=System.Type.GetType("System.Int32");
ts1.Columns.Add(keyid1);
DataColumn testtxt1=new DataColumn();
testtxt1.ColumnName="testtxt1";
testtxt1.DataType=System.Type.GetType("System.String");
ts1.Columns.Add(testtxt1);
ts1.Rows.Add(123, "abc");
Console.WriteLine(ts1.Rows[0]["keyid1"]); // 成功输出 123
}
}
using System.Data;class Program
{
static void Main()
{
DataTable ts1 = new DataTable();
DataColumn keyid1=new DataColumn();
keyid1.ColumnName="keyid1";
keyid1.DataType=System.Type.GetType("System.Int32");
ts1.Columns.Add(keyid1);
DataColumn testtxt1=new DataColumn();
testtxt1.ColumnName="testtxt1";
testtxt1.DataType=System.Type.GetType("System.String");
ts1.Columns.Add(testtxt1);
ts1.Rows.Add(123, "abc"); DataColumn tt1 = ts1.Columns["keyid1"]; // <--- OK,没问题。
Console.WriteLine(tt1); // 成功输出 keyid1
}
}
//表ts1为防止名称重复,将columnName改为tkeyid1
DataTable ts1 = new DataTable();
DataColumn keyid1=new DataColumn();
keyid1.ColumnName="tkeyid1";
keyid1.DataType=System.Type.GetType("System.Int32");
ts1.Columns.Add(keyid1);
DataColumn testtxt1=new DataColumn();
testtxt1.ColumnName="testtxt1";
testtxt1.DataType=System.Type.GetType("System.String");
ts1.Columns.Add(testtxt1);
//建立ts2表,与上面一样
DataTable ts2 = new DataTable();
DataColumn keyid2=new DataColumn();
keyid2.ColumnName="tkeyid2";
keyid2.DataType=System.Type.GetType("System.Int32");
ts2.Columns.Add(keyid2);
DataColumn testtxt2=new DataColumn();
testtxt2.ColumnName="testtxt2";
testtxt2.DataType=System.Type.GetType("System.String");
ts2.Columns.Add(testtxt2);
//不连数据库了,直接赋值
ts1.Rows.Add(123, "aaa");
ts2.Rows.Add(123, "bbb");
//加到到ds
ds.Tables.Add(ts1);
ds.Tables.Add(ts2);
//做relations
ds.Relations.Add("TabGX",
ds.Tables["ts1"].Columns["tkeyid1"],
ds.Tables["ts2"].Columns["tkeyid2"]
);
//运用做的关系,然后输出两边的关联值
foreach (DataRow theTabGx in ds.Tables["ts2"].Rows)
{
DataRow[] parents = theTabGx.GetParentRows("TabGX");
foreach (DataRow theTabGX1 in parents)
{
Response.Write(theTabGx[1]);
Response.Write(theTabGX1[1]);
Response.Write("<br>");
}
}
==================================================================仍然出问题!...
用response.write(ds.Tables["ts1"].Columns[0]);
可以看到,为数据库名称...调用为列名!