日期:2014-05-17  浏览次数:20401 次

使用用户登录IP比较数据库中该用户IP时出错~~大神速来~~~~~~~~~~~
说下具体想法

数据库已建好

表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所以不走