C# 数据库中的双重数据

C# 数据库中的双重数据,c#,web-services,webmethod,C#,Web Services,Webmethod,这是我将用户登录时间存储到数据库中的简单web方法 问题是数据被保存了两次到数据库中。例如,我登录到系统,然后它返回成功,但我检查了数据库,有两个相同的记录保存了相同的数据。我使用断点运行,但是没有任何重复,代码一行一行地很好地运行 有什么想法吗?先谢谢你 [WebMethod] public string Login(string Username, string Password) { String result; SqlConnect

这是我将用户登录时间存储到数据库中的简单web方法

问题是数据被保存了两次到数据库中。例如,我登录到系统,然后它返回成功,但我检查了数据库,有两个相同的记录保存了相同的数据。我使用断点运行,但是没有任何重复,代码一行一行地很好地运行

有什么想法吗?先谢谢你

    [WebMethod]
    public string Login(string Username, string Password)
    {
        String result;
        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Nicole Wong\Desktop\Inari Tracking System\Inari Tracking System\App_Data\Database1.mdf;Integrated Security=True;User Instance=True");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT Username, Password from UserData where Username = @Username AND Password = @Password", con);
        cmd.Parameters.AddWithValue("@UserName", Username);
        cmd.Parameters.AddWithValue("@Password", Password);
        cmd.ExecuteNonQuery();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        // Create an instance of DataSet.
        DataSet ds = new DataSet();
        da.Fill(ds);
        if (ds.Tables[0].Rows.Count> 0)
        {
            DateTime dt = DateTime.Now;
            SqlCommand cmd1 = new SqlCommand("INSERT INTO ActivityLog (CreateOn, CreateBy) VALUES (@CreateOn,@CreateBy)", con);
            cmd1.Parameters.AddWithValue("@CreateOn", dt);
            cmd1.Parameters.AddWithValue("@CreateBy", Username);
            cmd1.ExecuteNonQuery();
            SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
            // Create an instance of DataSet.
            DataSet ds1 = new DataSet();
            da1.Fill(ds);
            con.Close();

            result = "Successful";
            return result;
        }
        else
        {
            result = "Fail";
            return result;
        }

您执行了两次select和insert,使用select并不重要,但使用insert确实重要。从选择中删除
.ExecuteNonQuery()
,并从插入中删除
SqlDataAdapter

为什么要将
SqlDataAdapter
ExecuteNonQuery
一起用于同一个命令?很抱歉,实际上我是新手,使用这两个命令时有问题吗@联合国-lucky@Alois是的,这就是为什么你会被复制。
.ExecuteNonQuery()
运行一次insert,然后运行
da1.Fill(ds)再次运行插入。顺便说一句,当select是一个查询而insert是一个非查询时,您在select上执行同样的操作,同时作为查询和非查询执行。@Andrew谢谢!它修好了:)它修好了。谢谢,如果这解决了你的问题,请接受答案。
public string Login(string Username, string Password)
{
    String result;
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Nicole Wong\Desktop\Inari Tracking System\Inari Tracking System\App_Data\Database1.mdf;Integrated Security=True;User Instance=True");
    con.Open();
    SqlCommand cmd = new SqlCommand("SELECT Username, Password from UserData where Username = @Username AND Password = @Password", con);
    cmd.Parameters.AddWithValue("@UserName", Username);
    cmd.Parameters.AddWithValue("@Password", Password);
    //This us pretty much useless on a select, SELECT is a query, not a NonQuery
    //cmd.ExecuteNonQuery(); 
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    // Create an instance of DataSet.
    DataSet ds = new DataSet();
    da.Fill(ds);
    if (ds.Tables[0].Rows.Count> 0)
    {
        DateTime dt = DateTime.Now;
        SqlCommand cmd1 = new SqlCommand("INSERT INTO ActivityLog (CreateOn, CreateBy) VALUES (@CreateOn,@CreateBy)", con);
        cmd1.Parameters.AddWithValue("@CreateOn", dt);
        cmd1.Parameters.AddWithValue("@CreateBy", Username);
        cmd1.ExecuteNonQuery();
        //Don't use the DataAdapter and try to fill a dataset from an insert, all this insert will return is @@ROWCOUNT
        //SqlDataAdapter da1 = new SqlDataAdapter(cmd1); 
        // Create an instance of DataSet.
        //DataSet ds1 = new DataSet();
        //da1.Fill(ds); 
        con.Close();

        result = "Successful";
        return result;
    }
    else
    {
        result = "Fail";
        return result;
    }