将数据添加到数据库时出现问题(添加了更多数据/参数)

时间:2012-07-19 14:52:59

标签: c# database

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

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

这是代码......减少conn string和parametres。

    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;
    }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

您有三种选择:

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