首先新建反射类库
1、命名空间:WitbankData
2、类名:WitbankData
方法: public void Other(string accountName, string password, out int i)
具体代码如下
namespace WitbankData
{
public class WitbankData
{
public static System.Web.HttpCookie MyCookieUser = new System.Web.HttpCookie("SetCookieUser");
/// <summary>
/// 登录方法
/// </summary>
/// <param name="accountName">用户名</param>
/// <param name="password">密码</param>
/// <param name="i">返回参数: 0 对不起,帐户名或密码错误! 1 登录成功 2您的账号尚未开放请先进行身份认证</param>
public void Other(string accountName, string password, out int i)
{
int valueType = 0;
//获取数据
using (DataSet ds1 = GetData(accountName, password))
{
if (ds1.Tables[0].Rows.Count > 0)
{
if (int.Parse(ds1.Tables[0].Rows[0]["Status"].ToString()) == 0)
{
//您的账号尚未开放请先进行身份认证!
valueType = 2;
}
else
{
SetCookieUser("UserID", ds1.Tables[0].Rows[0]["UserID"].ToString());
SetCookieUser("Account", ds1.Tables[0].Rows[0]["AccountName"].ToString());
SetCookieUser("UserName", ds1.Tables[0].Rows[0]["UserName"].ToString());
SetCookieUser("UserStructureID", ds1.Tables[0].Rows[0]["StructureID"].ToString());
SetCookieUser("StationNameIng", ds1.Tables[0].Rows[0]["StationName"].ToString());
SetCookieUser("yhjf", ds1.Tables[0].Rows[0]["Enumerable"].ToString());
SetCookieUser("Business", ds1.Tables[0].Rows[0]["Business"].ToString());
SetCookieUser("UserMark", ds1.Tables[0].Rows[0]["UserMark"].ToString());
SetCookiesa();
//登录成功
valueType = 1;
}
}
else
{
// '对不起,帐户名或密码错误!
valueType = 0;
}
}
i = valueType;
}
/// <summary>
/// 查询数据
/// </summary>
/// <param name="accountName">用户名</param>
/// <param name="password">密码</param>
/// <returns></returns>
public DataSet GetData(string accountName, string password)
{
string Sql = "select * from Users where AccountName = '" + accountName.ToString().Replace("'", "'") + "' and LoginPassword = '" + password.ToString().Replace("'", "'").Trim() + "'";
using (SqlConnection conn = new SqlConnection("server=(local);User ID=sa;Password=happy;database=Elearning;Connection Reset=FALSE;Max Pool Size =512;"))//ConfigurationManager.ConnectionStrings["WitBank"].ConnectionString))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
DataSet ds1 = new DataSet();
cmd.CommandText = Sql;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(ds1);
ds1.Dispose();
return ds1;
}
}
}
/// <summary>
/// 写Cookie
/// </summary>
/// <param name="name"></param>
/// <param name="val"></param>
public void SetCookieUser(string name, string val)
{
try
{
MyCookieUser.Expires = DateTime.Now.AddDays(1);
MyCookieUser[name] = System.Web.HttpContext.Current.Server.UrlEncode(val);
System.Web.HttpContext.Current.Response.Cookies.Add(MyCookieUser);
}
catch
{
//System.Web.HttpContext.Current.Response.Write("errot--.");
}
}
public void SetCookiesa()
{
try
{
HttpCookie MyCookie = new HttpCookie("LastVisita");
DateTime now = DateTime.Now;
MyCookie["UserID"] = GetCookiesUser("UserID").ToString();
System.Web.HttpContext.Current.Response.Cookies.Add(MyCookie);
}
catch
{
}
}
public string GetCookiesUser(string name)
{
try
{
HttpCookie aa = System.Web.HttpContext.Current.Request.Cookies["SetCookieUser"];
if (aa.Values[name] != null)
{
return System.Web.HttpContext.Current.Server.UrlDecode(aa.Values[name]);
}
else
{
return "";
}
}
catch
{
return "";
}
}
/// <summary>
/// 获取有效时间
/// </summary>
/// <returns></returns>
public bool GetDate()
{
bool types = false;
if (DateTime.Now < DateTime.Parse("2013-09-09"))
{
types = true;
}
return types;
}
public void GetCheck(out bool type)
{
bool types = false;
if (DateTime.Now < DateTime.Parse("2013-09-09"))
{
types = true;
}
type = types;
}
}
}
反射调用:
private void Sub()
{
try
{
string path = System.Web.HttpContext.Current.Server.MapPath("").ToString() + "\\bin\\WitbankData.dll";//@"D:\Documents\Visual Studio 2008\Projects\localhost8022 (2)\WitbankData\bin\Debug\WitbankData.dll";
Assembly ass;
Type type;
object obj;
if (File.Exists(path))
{
//获取并加载DLL类库中的程序集
ass = Assembly.LoadFile(path);
//获取类的类型:必须使用名称空间+类名称
type = ass.GetType("WitbankData.WitbankData");
//获取类的方法:方法名称
MethodInfo Other = type.GetMethod("Other");
//对获取的类进行创建实例。//必须使用名称空间+类名称
obj = ass.CreateInstance("WitbankData.WitbankData");
//开始搜索方法
Other = type.GetMethod("Other");//方法的名称1
//定义数组,注:数组长度是3,当前只对前两个进行复制,第三个是返回参数
object[] parts = new object[3];
parts[0] = username.Text.ToString();//用户名
parts[1] = password.Text.ToString();//密码
//方法的调用
//注:如果调用的DLL类库中方法是静态的,那么Invoke方法中第一个参数传值为NULL。
// 如果方法不是静态的,那么Invoke方法中第一个参数传值为 obj(上面那个被实例的对象)
Other.Invoke(obj, parts);
//返回值
int returnValue = (int)parts[2];
// //您的账号尚未开放请先进行身份认证!
if (returnValue == 2)
{
Page.RegisterStartupScript("Error", "<script>alert('您的账号尚未开放请先进行身份认证!');win_linkb();</script>");
}
else if (returnValue == 0)
{
//'对不起,帐户名或密码错误
Page.RegisterStartupScript("Error", "<script>alert('对不起,帐户名或密码错误!')</script>");
}
else if (returnValue == 3)
{
Page.RegisterStartupScript("Error", "<script>alert('对不起,系统已过期!')</script>");
}
if (returnValue == 1)
{
Page.Response.Redirect("user/index.aspx");
}
}
}
catch (Exception ee)
{
Page.RegisterStartupScript("Errorr", "<script>alert('数据库故障或网络不正常请稍后重试!')</script>");
}
}
浙公网安备 33010602011771号