DataTable转换成string[]形式

何必为难 2012-09-18 10:13:33
for (int i = 0; i < dt1.Rows.Count; i++)
{
sa = (string[])ArrayList.Adapter((Array)dt1.Rows[i]["ModuleID"]).ToArray(typeof(string));
string s2 = "select * from ws_system where M_ParentID = " + sa[i] + "";

}

大概意思是这个意思,就是把dt1.Rows[i]["ModuleID"]赋值给string数组sa,然后查询。但是这样写是不行的,在循环外调用不了。求一个可用的方法
...全文
545 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
何必为难 2012-09-20
  • 打赏
  • 举报
回复
后台dal

public DataTable Module_SelectByID(string ModuleID)
{
StringBuilder sb = new StringBuilder();
sb.Append("select * from ws_system where M_ParentID = " + ModuleID + "");
DataTable dt = new DataTable();
dt = DbHelperSQL.Query(sb.ToString()/*, parameters*/).Tables[0];
if (dt.Rows.Count > 0)
{ return dt; }
else
{ return null; }
}

后台cs

HtmlInputHidden hidd = (HtmlInputHidden)e.Item.FindControl("Hidden1");
string i = hidd.Value;

c.ID = Session["user"].ToString();
DataTable dt = bll.Module_SelectByID(i.ToString());

if (dt.DefaultView.Count > 0)
{
Repeater LeftSubID = (Repeater)e.Item.FindControl("LeftMenu_Sub");
LeftSubID.DataSource = dt;
LeftSubID.DataBind();
}
else
{
e.Item.Visible = false;
}

谢谢各位,现在结贴给分!我是这么做的。已经实现了。
何必为难 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

从你的查询语句可以看出,你完全是个SQL外行,就连多表关联查询都不会写,你这里只要一条SQL语句就可以搞定的,你却要分多次查询嵌套,我都不想看你的那个C#代码了,你的问题应该从SQL语句的地方找起,改写SQL,一步执行到位,提高效率。
[/Quote]
我说大哥,说了一堆,就一句有用(改写SQL,一步执行到位,提高效率。),麻烦下回不要说这么多废话行么?我是外行怎么了?我内行就不问了。
qldsrx 2012-09-19
  • 打赏
  • 举报
回复
从你的查询语句可以看出,你完全是个SQL外行,就连多表关联查询都不会写,你这里只要一条SQL语句就可以搞定的,你却要分多次查询嵌套,我都不想看你的那个C#代码了,你的问题应该从SQL语句的地方找起,改写SQL,一步执行到位,提高效率。
熙风 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

C# code
string sql2 = "select * from ws_system where M_ParentID in (select ModuleID from ws_system where M_PageCode in (select Pagecode from ws_RolePermission where roleid=(select Power from ws_User……
[/Quote]


还不是很清楚,
List<int> ids=new List<int>();
for (int i = 0; i < dt1.Rows.Count; i++)
{
ids.Add(Convert.ToInt32(dt1.Rows[i]["ModuleID"]));
string s = "select * from ws_system where M_ParentID = " +dt1.Rows[i]["ModuleID"].ToString()+ "";
}
外面你想怎么用ids就怎么用
何必为难 2012-09-19
  • 打赏
  • 举报
回复
string sql2 = "select * from ws_system where M_ParentID in (select ModuleID from ws_system where M_PageCode in (select Pagecode from ws_RolePermission where roleid=(select Power from ws_User where id='" + c.ID + "')))";

首先,我数组接收是为了这个查询,我要循环查询,where M_ParentID in 后面是1,2,3,4,8我要的效果是
where M_ParentID =1,然后where M_ParentID =2,where M_ParentID =3, where M_ParentID =4 ,where M_ParentID =8
Sheng450422 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
C# code


public DataTable Module_SelectByID( Userl c)
{
string sql2 = "select ModuleID from ws_system where M_PageCode in (select " + "Pagecode from ws_RolePermission where roleid=(select ……
[/Quote]
有点地方写错了

public DataTable Module_SelectByID( Userl c)
{
string sql2 = "select ModuleID from ws_system where M_PageCode in (select " + "Pagecode from ws_RolePermission where roleid=(select Power from ws_User where " + "id='" + c.ID + "'))";
DataTable dt1 = DbHelperSQL.Query(sql2.ToString()/*, parameters*/).Tables[0];
string s2 = string.Empty;
for (int i = 0; i < dt1.Rows.Count; i++)
{
string sa = dt1.Rows[i]["ModuleID"].ToString().Trim();
s2 = s2 + sa + ",";
}
s2 = s2.Remove(s2.LastIndexOf(","), 1);//这里是去掉最后一个,号,你也可以用其他方法去掉,号
string sql3 = "select * from ws_system where M_ParentID in (" + s2 + ")";
DataTable dtMenu = DbHelperSQL.Query(sql3).Tables[0];
return dtMenu;
}
Sheng450422 2012-09-19
  • 打赏
  • 举报
回复

public DataTable Module_SelectByID( Userl c)
{
string sql2 = "select ModuleID from ws_system where M_PageCode in (select " + "Pagecode from ws_RolePermission where roleid=(select Power from ws_User where " + "id='" + c.ID + "'))";
DataTable dt1 = DbHelperSQL.Query(sql2.ToString()/*, parameters*/).Tables[0];
string s2 = string.Empty;
for (int i = 0; i < dt1.Rows.Count; i++)
{
string sa = dt1.Rows[i]["ModuleID"].ToString().Trim();
s2 = s2 + sa + ",";
}
s2 = s2.Remove(s2.LastIndexOf(","), 1);//这里是去掉最后一个,号,你也可以用其他方法去掉,号
string sql3 = "select * from ws_system where M_ParentID in (" + s2 + ")";
DataTable dtMenu = DbHelperSQL.Query(sql2.ToString()/*, parameters*/).Tables[0];
return dtMenu;
}

不知道这个是不是你想要的效果
种草德鲁伊 2012-09-19
  • 打赏
  • 举报
回复
菜单的数据不会很多,可以一次性读取完到内存,再组合成树
何必为难 2012-09-19
  • 打赏
  • 举报
回复

public DataTable Module_SelectByID( Userl c)
{

string sql2 = "select ModuleID from ws_system where M_PageCode in (select Pagecode from ws_RolePermission where roleid=(select Power from ws_User where id='" + c.ID + "'))";
/****************************************************************************************************************/
DataTable dt1 = DbHelperSQL.Query(sql2.ToString()/*, parameters*/).Tables[0];

List<DataTable> ass = new List<DataTable>();

for (int i = 0; i < dt1.Rows.Count; i++)
{
string sa = dt1.Rows[i]["ModuleID"].ToString().Trim();
string s2 = "select * from ws_system where M_ParentID = " + sa + "";

}
if (dt1.Rows.Count > 0)
{ return dt1; }
else
{ return null; }

}

是这样的,生成菜单,要一个一个的添加子菜单,五个菜单,添加五次(子菜单不一样)。一条SQL肯定不行的(或者我菜鸟不知道),所以用到循环和数组。我的知识有限,所以用for和string数组。没实现,求一个解决方法,传值啊,存储过程啊都行。
huwei001982 2012-09-19
  • 打赏
  • 举报
回复
懒得看 sql 正不正确了

DataTable 转换成 String[] 可以这样

string[] ary = Array.ConvertAll<DataRow,string>(datatable.Rows, r=>r["ModuleID"].ToString());
Randolfz 2012-09-18
  • 打赏
  • 举报
回复
楼上俩都对,结贴,接分
csdn_风中雪狼 2012-09-18
  • 打赏
  • 举报
回复

for (int i = 0; i < dt1.Rows.Count; i++)
{
string sa = dt1.Rows[i]["ModuleID"]).Tostring().trim();
string s2 = "select * from ws_system where M_ParentID = " + sa + "";

}
Randolphzc 2012-09-18
  • 打赏
  • 举报
回复
dt1.Rows[i]["ModuleID"]好像只是一个值吧,你为什么用数组接收,还ToArray。你直接用string类型的sa接收,tostring()不就得了,下面直接写+sa+

111,095

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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