最近做一个项目遇到了一个棘手的问题,请大家帮忙一下
就是我在数据库的表中有一条数据,三个字段如下:
Name 名称,DataBase 数据库名 DataTable 表名
我把上面这张表显示给用户,如果用户点击Name,就显示相对应的表名的数据。
但是我在WCF中(用到LINQ)无法实现了,首先是返回值的问题,因为有好多表名,如果返回集合的话,不能确定返回哪个表的集合。返回的问题现在我可以用XML,现在最棘手的问题就是查询的问题,如下:
1 /// <summary>
2 /// 取得所有的资源类别分类
3 /// </summary>
4 /// <returns></returns>
5 public string GetAllTypeCodeGroups(string strDataBase, string strDataTable)
6 {
7 try
8 {
9 MetadataDetail md = new MetadataDetail();
10
11 using (dbGRCategorySystemDataContext context = new dbGRCategorySystemDataContext())
12 {
13 List<tbCategroyStandard> lcs = context.ExecuteQuery<tbCategroyStandard>("EXEC sp_SearchMetaData @DataBase={0},@DataTable={1}", strDataBase, strDataTable).ToList<tbCategroyStandard>();
14 }
15 MemoryStream stream = new MemoryStream();
16 using (XmlDictionaryWriter writer =
17 XmlDictionaryWriter.CreateTextWriter(stream, Encoding.UTF8, false))
18 {
19 writer.WriteStartDocument();
20 writer.WriteElementString("SongName",
21 "urn:f",
22 "Aqualung");
23 writer.Flush();
24
25 }
26 stream.Position = 0;
27 return new StreamReader(stream).ReadToEnd();
28 }
29 catch (Exception e)
30 {
31 AccessLog.WriteLog(e.Message);
32 return null;
33 }
34 }
大家可以看一下红色的部分,那是确定的查询数据库的语句,如果现在不确定的情况下代码怎么写,因为每次不一定查询表tbCategroyStandard的值,有可能是其它表。现在我就不能解决这个问题,请大家帮忙了,在线等。帮解决的话奖励100分
你的问题就是不知道应该从那个表数据?用反射应该可以解决你的问题。
根据你传递的参数strDataTable 来确定生成那个对象
如 ITableName tbCategroyStandard = (ITableName)Assembly.Load("你的程序集名").CreateInstance(“strDataTable”)
还有就是 红色部分换为下面的方法
IEnumerable ExecuteQuery(Type elementType, string query, params object[] parameters);