0

我有一个数据库,我将一些数据插入其中。我遇到的问题是它会添加更多的数据。

当 logfordb.pos 增加时,它将再次添加所有 prevoius 数据,下一次它将添加更多。

这是代码......减少了一些连接字符串和参数。

    public void WriteToDatabase(DatabaseLog logfordb)
    {
        conn.Open();

        var cmd = new SqlCommand();
        cmd.CommandText = "Insert INTO [X] (Y, Z, C " + "Values (@val1, @val2, @val3";

        for (int index = 0; index < logfordb.ListofDB[logfordb.pos].X.Count; index++)
        {
            cmd.Connection = conn;
            cmd.Parameters.Clear();
            if (logfordb.ListofDB[logfordb.pos].X[index].Details != null)
            {
                cmd.Parameters.AddWithValue("@val1", logfordb.ListofDB[logfordb.pos].X[index].Details.Age);
                cmd.Parameters.AddWithValue("@val2", logfordb.ListofDB[logfordb.pos].X[index].Details.Name);
                cmd.Parameters.AddWithValue("@val3", logfordb.ListofDB[logfordb.pos].X[index].Details.Etc);
                cmd.ExecuteNonQuery();
            }
        }
        conn.Close();

        logfordb.pos += 1;
    }
4

2 回答 2

1

似乎您想更改 logfordb.pos 的值我想您想通过 ref 传递 logfordb。我怀疑这个值没有改变,第二次调用这个函数时,你最终会再次添加相同的数据,因为这个范围之外的值并没有被改变,只是函数看到的本地副本(然后存在破坏引用变化)。

于 2012-07-19T15:28:09.003 回答
0

每次调用时,您的代码都会遍历整个 logfordb。

你有三个选择:

  1. 在此方法结束时,完全清除 logfordb。(可能是最有意义的)
  2. 添加起始位置参数,让调用代码决定开始将logfordb记录推入数据库的位置。
  3. 为 logfordb 中的每条记录添加一个“已存储”属性,以便您可以在存储该单独记录时设置它,而不是再次推送该记录。

其中,选项 1 可能是您最安全的选择。

于 2012-07-19T15:34:46.697 回答