菜鸟求教啊,登录问题啊 。大家都来帮我啊急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急

fenxiang9875 2011-12-07 08:35:45
c/s系统啊,类似qq的客户端,不是web啊,mysql数据库要在表user中添加一个字段login判断是否在线,在线者写入1,退出就改成0,求高手教教我怎么写啊,把代码附上啊,谢谢啊
...全文
222 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaofei830927 2011-12-21
  • 打赏
  • 举报
回复
这个问题 你想的太简单了
如果正常登录 下线 的话好做 只需要在登录 和退操作中 添加方法 修改相应的 login字段
这是标准的请求响应方案

但是 如果网络断开的话怎么办 客户端机器挂掉了怎么办 难道服务器中该账号会一直保持登录状态么

解决这个问题有两个解决方案 一种是 服务器端维护一个列表 如果某账号n秒时间 没有发送请求的话 就把它踢下线 这个方案需要客户端做心跳检测 只需要检测网络畅通请求正常即可

另一种是 推送方案服务器端向客户端做检测 这个方案是服务器向客户端推送数据 需要有客户端IP的一个列表 当客户端登陆的时候 写入该列表 当客户端一段时间没有链接的时候 提出客户端

两者不同的是 请求方一个是客户端 一个是服务器

我感觉你做的程序 只有客户端 没有服务器端 ,只是所有的客户端都去链接一个数据库 这样的程序 不叫C/S结构 只能算作数据库维护程序的加强版 呵呵 开个玩笑


fenxiang9875 2011-12-09
  • 打赏
  • 举报
回复
怎么没人回答了啊?
fenxiang9875 2011-12-09
  • 打赏
  • 举报
回复
我还是没全明白
fenxiang9875 2011-12-09
  • 打赏
  • 举报
回复
高手还不出现啊。写出来吧
至尊贱客 2011-12-08
  • 打赏
  • 举报
回复
有没有考虑意外关闭怎么办 网络断了怎么办 这样 这个状态可能一直保持登录状态 下次就登录不上去了 这个问题如何处理
空心菜123 2011-12-08
  • 打赏
  • 举报
回复
登录时修改state修改为1,最好添加是把state默认设置为0
熙风 2011-12-08
  • 打赏
  • 举报
回复
/// <summary>
/// 通用数据库类MySQL
/// </summary>
public class Class_mysql_conn
{
//public static string ConnStr = @"server=数据库;uid=帐号;pwd=密码;database=数据库;charset=utf8";
public static string ConnStr = MyData.Properties.Settings.Default.my_soft_mysqlConn + "pwd=密码;charset=utf8;";

//打开数据库链接
public static MySqlConnection Open_Conn( string ConnStr)
{
MySqlConnection Conn = new MySqlConnection(ConnStr);
Conn.Open();
return Conn;
}
//关闭数据库链接
public static void Close_Conn(MySqlConnection Conn)
{
if(Conn != null)
{
Conn.Close();
Conn.Dispose();
}
GC.Collect();
}
//运行MySql语句
public static int Run_SQL(string SQL, string ConnStr)
{
MySqlConnection Conn = Open_Conn(ConnStr);
MySqlCommand Cmd = Create_Cmd(SQL, Conn);
try
{
int result_count = Cmd.ExecuteNonQuery();
Close_Conn(Conn);
return result_count;
}
catch
{
Close_Conn(Conn);
return 0;
}
}


登录事件
string sql= update [user] set [state]=1 where [userid]=
Run_SQL(sql);
熙风 2011-12-08
  • 打赏
  • 举报
回复
/// <summary>
/// 通用数据库类MySQL
/// </summary>
public class Class_mysql_conn
{
//public static string ConnStr = @"server=数据库;uid=帐号;pwd=密码;database=数据库;charset=utf8";
public static string ConnStr = MyData.Properties.Settings.Default.my_soft_mysqlConn + "pwd=密码;charset=utf8;";

//打开数据库链接
public static MySqlConnection Open_Conn( string ConnStr)
{
MySqlConnection Conn = new MySqlConnection(ConnStr);
Conn.Open();
return Conn;
}
//关闭数据库链接
public static void Close_Conn(MySqlConnection Conn)
{
if(Conn != null)
{
Conn.Close();
Conn.Dispose();
}
GC.Collect();
}
//运行MySql语句
public static int Run_SQL(string SQL, string ConnStr)
{
MySqlConnection Conn = Open_Conn(ConnStr);
MySqlCommand Cmd = Create_Cmd(SQL, Conn);
try
{
int result_count = Cmd.ExecuteNonQuery();
Close_Conn(Conn);
return result_count;
}
catch
{
Close_Conn(Conn);
return 0;
}
}


登录事件
string sql= update [user] set [state]=1 where [userid]=
Run_SQL(sql);
freedom_wyz 2011-12-08
  • 打赏
  • 举报
回复
4楼代码很详细了。
baizongjie 2011-12-08
  • 打赏
  • 举报
回复
四楼与五楼的程序你要是看明白的话就完全够用了

仔细看一下

CS_INSPUR 2011-12-08
  • 打赏
  • 举报
回复
JF 字数你妹.exe
ooo7880000 2011-12-08
  • 打赏
  • 举报
回复

//修改login为0
string _sql = "Update User Set login=1 WHERE User="+User;
ExecSqlStr(_sql);
//查找login,判断是否在线
string _sql_1="Select login form User WHERE User="+User
ExecSqlStr(_sql_1);
/// <summary>
/// 执行一条SQL语句
/// </summary>
/// <param name="strSql"></param>
public static void ExecSqlStr(string strSql)
{
//数据库连接,自己写
string strCon = "data source=.;initial catalog=;password=;persist security info=True;user id=";
SqlConnection conn = new SqlConnection(strCon);

SqlCommand comm = new SqlCommand();
comm.CommandText = strSql;
comm.Connection = conn;

try
{
conn.Open();
comm.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Dispose();
conn.Close();
conn.Dispose();
}
}
freemangood 2011-12-08
  • 打赏
  • 举报
回复
4楼给出示例代码了,楼主根据自己表结构及集体要求相应改改。

原理是一样可行的。
烟波钓 2011-12-08
  • 打赏
  • 举报
回复
建议两位搞一张表专门维护这个东西
这张表里面的信息 用户名 客户端IP
1.用户登录时去这张表里面查一条记录
2.客户端的程序关闭时,去这张表里面删除一条记录
3.不能多个登录问题也是通过这个表来解决 还能给出必要的提示的信息
绿领巾童鞋 2011-12-08
  • 打赏
  • 举报
回复
using System;
using System.Configuration;
using System.Collections;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace MyData
{
/// <summary>
/// 通用数据库类MySQL
/// </summary>
public class Class_mysql_conn
{
//public static string ConnStr = @"server=数据库;uid=帐号;pwd=密码;database=数据库;charset=utf8";
public static string ConnStr = MyData.Properties.Settings.Default.my_soft_mysqlConn + "pwd=密码;charset=utf8;";

//打开数据库链接
public static MySqlConnection Open_Conn( string ConnStr)
{
MySqlConnection Conn = new MySqlConnection(ConnStr);
Conn.Open();
return Conn;
}
//关闭数据库链接
public static void Close_Conn(MySqlConnection Conn)
{
if(Conn != null)
{
Conn.Close();
Conn.Dispose();
}
GC.Collect();
}
//运行MySql语句
public static int Run_SQL(string SQL, string ConnStr)
{
MySqlConnection Conn = Open_Conn(ConnStr);
MySqlCommand Cmd = Create_Cmd(SQL, Conn);
try
{
int result_count = Cmd.ExecuteNonQuery();
Close_Conn(Conn);
return result_count;
}
catch
{
Close_Conn(Conn);
return 0;
}
}
// 生成Command对象
public static MySqlCommand Create_Cmd(string SQL, MySqlConnection Conn)
{
MySqlCommand Cmd = new MySqlCommand(SQL, Conn);
return Cmd;
}
// 运行MySql语句返回 DataTable
public static DataTable Get_DataTable(string SQL, string ConnStr, string Table_name)
{
MySqlDataAdapter Da = Get_Adapter(SQL, ConnStr);
DataTable dt = new DataTable(Table_name);
Da.Fill(dt);
return dt;
}
// 运行MySql语句返回 MySqlDataReader对象
public static MySqlDataReader Get_Reader(string SQL, string ConnStr)
{
MySqlConnection Conn = Open_Conn(ConnStr);
MySqlCommand Cmd = Create_Cmd(SQL, Conn);
MySqlDataReader Dr;
try
{
Dr = Cmd.ExecuteReader(CommandBehavior.Default);
}
catch
{
throw new Exception(SQL);
}
Close_Conn(Conn);
return Dr;
}
// 运行MySql语句返回 MySqlDataAdapter对象
public static MySqlDataAdapter Get_Adapter(string SQL, string ConnStr)
{
MySqlConnection Conn = Open_Conn(ConnStr);
MySqlDataAdapter Da = new MySqlDataAdapter(SQL, Conn);
return Da;
}
// 运行MySql语句,返回DataSet对象
public static DataSet Get_DataSet(string SQL, string ConnStr, DataSet Ds)
{
MySqlDataAdapter Da = Get_Adapter(SQL, ConnStr);
try
{
Da.Fill(Ds);
}
catch(Exception Err)
{
throw Err;
}
return Ds;
}
// 运行MySql语句,返回DataSet对象
public static DataSet Get_DataSet(string SQL, string ConnStr, DataSet Ds, string tablename)
{
MySqlDataAdapter Da = Get_Adapter(SQL, ConnStr);
try
{
Da.Fill(Ds,tablename);
}
catch(Exception Ex)
{
throw Ex;
}
return Ds;
}
// 运行MySql语句,返回DataSet对象,将数据进行了分页
public static DataSet Get_DataSet(string SQL, string ConnStr, DataSet Ds, int StartIndex, int PageSize, string tablename)
{
MySqlConnection Conn = Open_Conn(ConnStr);
MySqlDataAdapter Da = Get_Adapter(SQL, ConnStr);
try
{
Da.Fill(Ds, StartIndex, PageSize, tablename);
}
catch(Exception Ex)
{
throw Ex;
}
Close_Conn(Conn);
return Ds;
}
// 返回MySql语句执行结果的第一行第一列
public static string Get_Row1_Col1_Value(string SQL, string ConnStr)
{
MySqlConnection Conn = Open_Conn(ConnStr);
string result;
MySqlDataReader Dr ;
try
{
Dr = Create_Cmd(SQL,Conn).ExecuteReader();
if (Dr.Read())
{
result = Dr[0].ToString();
Dr.Close();
}
else
{
result = "";
Dr.Close();
}
}
catch
{
throw new Exception(SQL);
}
Close_Conn(Conn);
return result;
}
}
}
------------------------------------------------------------------
app.config 里的数据库链接字符串
------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="MyData.Properties.Settings.my_soft_mysqlConn" connectionString="server=localhost;database=my_soft;uid=root;"
</connectionStrings>
</configuration>
++
xiaocainiao0011 2011-12-08
  • 打赏
  • 举报
回复
等待高人出现啊
xiaocainiao0011 2011-12-08
  • 打赏
  • 举报
回复
登录和退出的时候分别改变下数据库的字段,这不就ok了??代码加在哪里啊?我想知道啊,大侠们好人做到底吧。
fenxiang9875 2011-12-08
  • 打赏
  • 举报
回复
怎么改啊?????
LOVE_GG 2011-12-08
  • 打赏
  • 举报
回复
登录和退出的时候分别改变下数据库的字段,这不就ok了??
fenxiang9875 2011-12-08
  • 打赏
  • 举报
回复
没看明白啊,高手给讲讲啊,没看到那个状态改变啊就是islogin的怎么改变的啊
加载更多回复(4)

110,538

社区成员

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

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

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