无法从“string”转换为“System.Data.DataColumn[]

userpengcl 2012-05-08 02:02:51
protected void Button1_Click(object sender, EventArgs e)
{
DataTable dsIIS = new DataTable();
DataTable dsSwt = new DataTable();
dsIIS = it.IISMatch();
dsSwt = vt.SwtMatch();

DataTable dsIISSwt = new DataTable();

dsIISSwt = Join(dsIIS, dsSwt,"id","visistorId");


}
----------------------------------------
public DataTable Join(DataTable First, DataTable Second, DataColumn[] FJC, DataColumn[] SJC)
{

//创建一个新的DataTable

DataTable table = new DataTable("Join");


// Use a DataSet to leverage DataRelation

using (DataSet ds = new DataSet())
{

//把DataTable Copy到DataSet中

ds.Tables.AddRange(new DataTable[] { First.Copy(), Second.Copy() });

DataColumn[] parentcolumns = new DataColumn[FJC.Length];

for (int i = 0; i < parentcolumns.Length; i++)
{

parentcolumns[i] = ds.Tables[0].Columns[FJC[i].ColumnName];

}

DataColumn[] childcolumns = new DataColumn[SJC.Length];

for (int i = 0; i < childcolumns.Length; i++)
{

childcolumns[i] = ds.Tables[1].Columns[SJC[i].ColumnName];

}


//创建关联

DataRelation r = new DataRelation(string.Empty, parentcolumns, childcolumns, false);

ds.Relations.Add(r);


//为关联表创建列

for (int i = 0; i < First.Columns.Count; i++)
{

table.Columns.Add(First.Columns[i].ColumnName, First.Columns[i].DataType);

}

for (int i = 0; i < Second.Columns.Count; i++)
{

//看看有没有重复的列,如果有在第二个DataTable的Column的列明后加_Second

if (!table.Columns.Contains(Second.Columns[i].ColumnName))

table.Columns.Add(Second.Columns[i].ColumnName, Second.Columns[i].DataType);

else

table.Columns.Add(Second.Columns[i].ColumnName + "_Second", Second.Columns[i].DataType);

}


table.BeginLoadData();

foreach (DataRow firstrow in ds.Tables[0].Rows)
{

//得到行的数据

DataRow[] childrows = firstrow.GetChildRows(r);

if (childrows != null && childrows.Length > 0)
{

object[] parentarray = firstrow.ItemArray;

foreach (DataRow secondrow in childrows)
{

object[] secondarray = secondrow.ItemArray;

object[] joinarray = new object[parentarray.Length + secondarray.Length];

Array.Copy(parentarray, 0, joinarray, 0, parentarray.Length);

Array.Copy(secondarray, 0, joinarray, parentarray.Length, secondarray.Length);

table.LoadDataRow(joinarray, true);

}

}

}

table.EndLoadData();

}


return table;

}
这是代码,我想要实现的是两个DataTable的联合查询,但是怎么调用啊,我新手,很多不懂!
...全文
314 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
userpengcl 2012-05-08
  • 打赏
  • 举报
回复
DataRelation r = new DataRelation(string.Empty, parentcolumns, childcolumns, false);
这里出错,说父列和子列不具有类型匹配的列
kaikai_kk 2012-05-08
  • 打赏
  • 举报
回复
定义数组并赋初值,即像这样:

DataColumn[] cols1= new DataColumn[2];
cols1[0] = dsIIS.Columns[0];
cols1[1] = dsIIS.Columns[1];
userpengcl 2012-05-08
  • 打赏
  • 举报
回复
bdmh
DataColumn[] cols1= new DataColumn[]{dsIIS.Columns[0],dsIIS.Columns[1]};
这里后面的大括号里面是什么意思啊?
bdmh 2012-05-08
  • 打赏
  • 举报
回复
Join后两个参数是column数组,不是字符串,你要创建两个column数组,里面应该存放的是要合并一起显示的列
比如

DataColumn[] cols1= new DataColumn[]{dsIIS.Columns[0],dsIIS.Columns[1]};
DataColumn[] cols2= new DataColumn[]{dsSwt.Columns[0],dsSwt.Columns[1]};

dsIISSwt = Join(dsIIS, dsSwt,cols1,cols2);
userpengcl 2012-05-08
  • 打赏
  • 举报
回复
谁能帮帮我啊,谢谢了!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧