4,328
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Text;
using FluorineFx;
using System.Data;
using System.Data.SqlClient;
namespace ServiceLibrary
{
/// <summary>
/// Fluorine sample service.
/// </summary>
[RemotingService("Fluorine sample service")]
public class Sample
{
public Sample()
{
}
public string Echo(string text)
{
return "Gateway echo: " + text;
}
public DataTable GetData()
{
SqlConnection conn = new SqlConnection(); //定义“SqlConnnection”类实例
//数据库连接字符串
conn.ConnectionString = "Data Source=.;Initial Catalog=Computer_lover_bbs;Integrated Security=True";
//定义“SqlCommand”实例,从“Notes”表中取数据
SqlCommand command = new SqlCommand("select UserName,TitleID,ContentID from Content", conn);
conn.Open();//打开连接
SqlDataAdapter da = new SqlDataAdapter(); //定义“SqlDataAdapter”类实例
//将“command”值传递给“SqlDataAdapter”的“SelectCommand”属性
da.SelectCommand = command;
DataSet ds = new DataSet(); //定义“DataSet”类实例
da.Fill(ds, "stars"); //取数据
return ds.Tables["stars"];
}
}
}
/// <summary>
/// DataTable 转换为List 集合
/// </summary>
/// <typeparam name="TResult">类型</typeparam>
/// <param name="dt">DataTable</param>
/// <returns></returns>
public static List<TResult> ToList<TResult>(this DataTable dt) where TResult : class, new()
{
//创建一个属性的列表
var prlist = new List<PropertyInfo>();
//获取TResult的类型实例 反射的入口
Type t = typeof(TResult);
//获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表
Array.ForEach(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });
//创建返回的集合
var oblist = new List<TResult>();
foreach (DataRow row in dt.Rows)
{
//创建TResult的实例
var ob = new TResult();
//找到对应的数据 并赋值
prlist.ForEach(p =>
{
if (row[p.Name] != DBNull.Value)
p.SetValue(ob, row[p.Name], null);
});
//放入到返回的集合中.
oblist.Add(ob);
}
return oblist;
}