说下具体想法
数据库已建好
表getuseip中 loginIP字段储存用户登录IP
具体思路是用户每次登录用getip()方法获取用户IP并与数据库中该用户以往登录IP比较 若不同与以往每一次登录IP则将用户名,IP写入getuseip表中
并在Role表中修改用户登录次数和用户IP变换次数(分别加1)
下面是代码,由于VS2010不报错所以我真心不知道哪里错了,大神来指教!
- C# code
getip gi = new getip(); string result = gi.IPAddress(); SqlConnection conn = new SqlConnection(); conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["diagnoiseSystemConnectionString"].ConnectionString; conn.Open(); SqlDataAdapter da = new SqlDataAdapter(); SqlCommand selectcmd = new SqlCommand(); selectcmd.Connection = conn; selectcmd.CommandText = "select loginIP from getuseip where UserName='" + Login1.UserName.ToString() + "' "; da.SelectCommand = selectcmd; DataSet ds1 = new DataSet(); da.Fill(ds1, "ip"); int i = 0; foreach(DataRow dr1 in ds1.Tables["ip"].Rows) { if (String.Compare(dr1[0].ToString(), result)==0) { i = i + 1; break; } } if(i==0) { SqlCommand selectcmd1 = new SqlCommand(); selectcmd.Connection = conn; selectcmd1.CommandText = "select * from getuseip"; SqlCommand insert = new SqlCommand(); insert.CommandText = "insert into getuseip values(@UserName,@loginIP)"; insert.Connection = conn; da.SelectCommand = selectcmd1; da.Fill(ds1, "getuseip"); insert.Parameters.Add("@UserName", SqlDbType.VarChar, 50, "UserName"); insert.Parameters.Add("@loginIP", SqlDbType.NChar, 10, "loginIP"); da.InsertCommand = insert; DataRow dr2 = ds1.Tables["getuseip"].NewRow(); dr2[0] = Login1.UserName.ToString(); dr2[1] = result; ds1.Tables["getuseip"].Rows.Add(dr2); da.Update(ds1, "getuseip"); SqlCommand udata1 = new SqlCommand(); udata1.CommandText = "Update Role,ipchange set logincount=logincount+1,ipchange=ipchange+1 where UserName=@UserName"; udata1.Connection = conn; SqlParameter param = new SqlParameter("@UserName", Login1.UserName); udata1.Parameters.Add(param); udata1.ExecuteNonQuery(); conn.Close(); } Login1.DestinationPageUrl = "~/Main.aspx";
关于这段代码,我很奇怪啊,不管是使用断点还是啥的方法都调试不出错误。
一句话就是VS根本不报错,郁闷~!~~!!
------解决方案--------------------------------------------------------
错误这个概念范围很广,不是是错误,vs就一定要报错,你代码执行没问题当然不会报错了,如果是达不到你要的效果,那就是你代码写的有问题,下断点,调试
------解决方案--------------------------------------------------------
if (String.Compare(dr1[0].ToString(), result)==0)
{
i = i + 1;
break;
}
这句不成立应该。i永远大于0所以不走if(i=0)
------解决方案--------------------------------------------------------