应聘asp.net程序员笔试题——递归读取树状表生成json字符串(转)
2009-05-21 01:35
447 查看
这种树状表挺普遍的,和大家探讨下,挺喜欢递归方式读取这表,以前写过个递归读取用户控件生成管理这种表数据的table。
那范围就小了,看来看去就投了两家,桂林这行真的不砸的...
面试还算顺利,最后还要做道笔试题,笔就笔吧
/**//*
要求:根据下面提供的树状表Tasks,
使用C#,写一个函数,读取数据库表Tasks,
根据表的内容输出string类型的结果,
结果的内容如下:
[
{
TaskID:'1',ParentID:'0',TaskName:'软件开发',
children:[
{
TaskID:'2',ParentID:'1',TaskName:'需求分析',
children:[
{TaskID:'3',ParentID:'2',TaskName:'客户需求调研'},
{TaskID:'4',ParentID:'2',TaskName:'生成需求文档'}
]
},
{
TaskID:'5',ParentID:'1',TaskName:'系统分析',
children:[
{TaskID:'6',ParentID:'5',TaskName:'数据库设计'}
]
}
]
}
]
---------------------------------------------------
Tasks(任务表)表结构SQL脚本
---------------------------------------------------
TaskID ParentID TaskName //任务ID,父任务ID,任务名称
---------------------------------------------------
1 0 软件开发
2 1 需求分析
3 2 客户需求调研
4 2 生成需求文档
5 1 系统分析
6 5 数据库设计
---------------------------------------------------
*/
CREATE TABLE Tasks (
TaskId int , //任务ID
ParentID int, //父任务ID
TaskName varchar (50) //任务名称
)
GO
Insert Into Tasks (TaskID,ParentID,TaskName)
select 1,0,'软件开发'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 2,1,'需求分析'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 3,2,'客户需求调研'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 4,2,'生成需求文档'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 5,1,'系统分析'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 6,5,'数据库设计'
一个用DataReader这玩意,一个用datatable。算了这是笔试要讲速度的就先用datareader写吧
public static string GetTasksString(int TaskId)
{
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["Link"].ConnectionString))
{
conn.Open();
return "[" + GetTasksString(TaskId, conn) + "]";
}
}
private static string GetTasksString(int TaskId, OleDbConnection conn)
{
OleDbCommand comm = new OleDbCommand("select * from [Tasks] where ParentID=" + TaskId, conn);
OleDbDataReader red = comm.ExecuteReader();
if (!red.Read()) return string.Empty;
StringBuilder str = new StringBuilder();
do
{
str.Append("{");
for (int i = 0; i < red.FieldCount; i++)
{
if (i != 0) str.Append(",");
str.Append(red.GetName(i));
str.Append(":'");
str.Append(red.GetString(i));
str.Append("'");
}
str.Append(",children:[");
str.Append(GetTasksString(red.GetInt32(0), conn));
str.Append("]},");
} while (red.Read());
return str[str.Length] == ',' ? str.ToString(0, str.Length - 1) : str.ToString();
}
2.为什么我总是喜欢用datatable
public static string GetTasks(int TaskId)
{
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["Link"].ConnectionString))
{
conn.Open();
OleDbCommand comm = new OleDbCommand("select * from [Tasks]", conn);
OleDbDataAdapter ada = new OleDbDataAdapter();
DataTable table = new DataTable();
ada.Fill(table);
}
return "["+GetTasksString(TaskId,table)+"]";
}
private static string GetTasksString(int TaskId,DataTable table)
{
DataRow[] rows = table.Select("ParentID="+TaskId.ToString());
if (rows.Length == 0) return string.Empty; ;
StringBuilder str = new StringBuilder();
foreach(DataRow row in rows)
{
str.Append("{");
for (int i = 0; i < row.Table.Columns.Count; i++)
{
if(i!=0)str.Append(",");
str.Append(row.Table.Columns[i].ColumnName);
str.Append(":'");
str.Append(row[i].ToString());
str.Append("'");
}
str.Append(",children:[");
str.Append(GetTasksString((int)row["TaskID"],table));
str.Append("]},");
}
return str[str.Length] == ',' ? str.ToString(0, str.Length - 1) : str.ToString();
}
应聘:
读书三年,毕业了,实习半年的旅游公司也已辞职,打算找正儿八经的搞程序的公司。网上投吧,暂不打算离开桂林那范围就小了,看来看去就投了两家,桂林这行真的不砸的...
面试还算顺利,最后还要做道笔试题,笔就笔吧
题目:
/**//*
要求:根据下面提供的树状表Tasks,
使用C#,写一个函数,读取数据库表Tasks,
根据表的内容输出string类型的结果,
结果的内容如下:
[
{
TaskID:'1',ParentID:'0',TaskName:'软件开发',
children:[
{
TaskID:'2',ParentID:'1',TaskName:'需求分析',
children:[
{TaskID:'3',ParentID:'2',TaskName:'客户需求调研'},
{TaskID:'4',ParentID:'2',TaskName:'生成需求文档'}
]
},
{
TaskID:'5',ParentID:'1',TaskName:'系统分析',
children:[
{TaskID:'6',ParentID:'5',TaskName:'数据库设计'}
]
}
]
}
]
---------------------------------------------------
Tasks(任务表)表结构SQL脚本
---------------------------------------------------
TaskID ParentID TaskName //任务ID,父任务ID,任务名称
---------------------------------------------------
1 0 软件开发
2 1 需求分析
3 2 客户需求调研
4 2 生成需求文档
5 1 系统分析
6 5 数据库设计
---------------------------------------------------
*/
CREATE TABLE Tasks (
TaskId int , //任务ID
ParentID int, //父任务ID
TaskName varchar (50) //任务名称
)
GO
Insert Into Tasks (TaskID,ParentID,TaskName)
select 1,0,'软件开发'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 2,1,'需求分析'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 3,2,'客户需求调研'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 4,2,'生成需求文档'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 5,1,'系统分析'
Insert Into Tasks (TaskID,ParentID,TaskName)
select 6,5,'数据库设计'
思考:
粗略看了下,还行挺普遍的数据表估计是要生成用在ext上的json数据,呵呵还对得起我这应届生,有两思路一个用DataReader这玩意,一个用datatable。算了这是笔试要讲速度的就先用datareader写吧
解题:
1.花了20分钟搞出来了,慢了点,其实我对datatable更熟悉的怎么选了readerpublic static string GetTasksString(int TaskId)
{
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["Link"].ConnectionString))
{
conn.Open();
return "[" + GetTasksString(TaskId, conn) + "]";
}
}
private static string GetTasksString(int TaskId, OleDbConnection conn)
{
OleDbCommand comm = new OleDbCommand("select * from [Tasks] where ParentID=" + TaskId, conn);
OleDbDataReader red = comm.ExecuteReader();
if (!red.Read()) return string.Empty;
StringBuilder str = new StringBuilder();
do
{
str.Append("{");
for (int i = 0; i < red.FieldCount; i++)
{
if (i != 0) str.Append(",");
str.Append(red.GetName(i));
str.Append(":'");
str.Append(red.GetString(i));
str.Append("'");
}
str.Append(",children:[");
str.Append(GetTasksString(red.GetInt32(0), conn));
str.Append("]},");
} while (red.Read());
return str[str.Length] == ',' ? str.ToString(0, str.Length - 1) : str.ToString();
}
2.为什么我总是喜欢用datatable
public static string GetTasks(int TaskId)
{
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["Link"].ConnectionString))
{
conn.Open();
OleDbCommand comm = new OleDbCommand("select * from [Tasks]", conn);
OleDbDataAdapter ada = new OleDbDataAdapter();
DataTable table = new DataTable();
ada.Fill(table);
}
return "["+GetTasksString(TaskId,table)+"]";
}
private static string GetTasksString(int TaskId,DataTable table)
{
DataRow[] rows = table.Select("ParentID="+TaskId.ToString());
if (rows.Length == 0) return string.Empty; ;
StringBuilder str = new StringBuilder();
foreach(DataRow row in rows)
{
str.Append("{");
for (int i = 0; i < row.Table.Columns.Count; i++)
{
if(i!=0)str.Append(",");
str.Append(row.Table.Columns[i].ColumnName);
str.Append(":'");
str.Append(row[i].ToString());
str.Append("'");
}
str.Append(",children:[");
str.Append(GetTasksString((int)row["TaskID"],table));
str.Append("]},");
}
return str[str.Length] == ',' ? str.ToString(0, str.Length - 1) : str.ToString();
}
相关文章推荐
- asp.net用sql数据库生成json字符串并显示出来
- 用ASP.NET生成JSON字符串
- ASP.NET用SQL Server中的数据来生成JSON字符串
- ASP.NET生成JSON字符串
- asp.net mvc c# 读取json文件返回字符串
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 一起谈.NET技术,ASP.NET用SQL Server中的数据来生成JSON字符串
- [ASP.net]从数据库中读取数据自动生成XML
- ASP.NET Excel的生成,读取,和2003与2007兼容
- Web前台传对象字符串到后台并让后台反序列化对象字符串的方法(ASP.NET) json对象和字符串的转换
- Asp.Net MVC 在后台获取PartialView、View文件生成的字符串
- 使用JSON.net 将实体类生成JSON字符串
- ASP.NET中上传并读取Excel文件数据,附后生成EXCEL及杀掉EXCEL进程。
- 怎样从ASP.NET 2.0中读取连接字符串的设置
- ASP.NET自带对象JSON字符串与实体类的转换
- 【转】面试ASP.NET程序员的笔试题和机试题
- html页面post json字符串到asp.net 接收并处理
- js生成的cookie由asp.net读取的时候中文乱码问题的解决
- 面试ASP.NET程序员的笔试题和机试题
- asp.net web 字符串转json并处理