我每分钟只能保存一条记录,如何删除此限制?

时间:2014-06-11 06:21:05

标签: c# sql winforms sql-server-2008

我创建了一个应用程序,它使用带有简单插入查询的ADO.Net将数据保存到位于本地服务器上的sql表中。但是,应用程序或服务器似乎每分钟只接受一条记录。如何让表格接受更多记录? 破解代码后,我收到以下错误消息:

  

违反PRIMARY KEY。无法在对象' dbo.AppLog'

中插入重复键

以下是我使用的代码段:

#region Sql Insert statement
try {
    if (Conn.State == ConnectionState.Closed) {
        Conn.Open();
    } else if (Conn.State == ConnectionState.Open) {
        cmd = new SqlCommand("insert into [AppLog] values('" + strbuff + "', '" + time + "','" + Processing + "','" + userName + "')", Conn);
        cmd.ExecuteNonQuery();

        Conn.Close();
    }


} catch (Exception ex) {
    //MessageBox.Show(ex.Message);
}#endregion

此代码由我设置为1000毫秒的计时器执行 enter image description here

3 个答案:

答案 0 :(得分:2)

您遇到此错误的原因是因为列ITime是您的主键。

主键在您的表中应该是唯一的。

目前,当您添加行时,会添加添加到ITime列的时间。例如:

2014-06-10 16:32

当您尝试添加另一行时,它会将同时添加到ITime列,因此您最终会这样:

2014-06-10 16:32
2014-06-10 16:32

问题是,因为ITime列是您的主键,您的表格中不能包含重复值

要解决此问题,请添加新列作为主键,或者将时间更加独特,例如将时间添加为刻度。

答案 1 :(得分:1)

您使用ITime列作为主键吗?这解释了每分钟一次记录的问题,因为您的时间限制在几分钟之内。也;它说你有一个主键违规。这与表演等无关。

此外;你的if-block非常奇怪:

if (Conn.State == ConnectionState.Closed) {
    Conn.Open();
} else if (Conn.State == ConnectionState.Open) {
    cmd = new SqlCommand("insert into [AppLog] values('" + strbuff + "', '" + time + "','" + Processing + "','" + userName + "')", Conn);
    cmd.ExecuteNonQuery();

    Conn.Close();
}

如果你有一个关闭的连接,你打开它;否则你运行一个查询并关闭它?这是为了吗?

答案 2 :(得分:1)

这不是一个完整的答案,因为您的问题并不完整。

但是,在提供的代码中有两个重要的事情要修复:

  1. 当连接状态关闭时,您只需打开连接而不执行查询。 (已移除else)。

  2. 添加了SqlCommand parameters

  3. try-catch块中更改的代码:

    if (Conn.State == ConnectionState.Closed)
         Conn.Open();
    
    if (Conn.State == ConnectionState.Open)
    {
         cmd = new SqlCommand("insert into [AppLog] values (@strbuff, 
                                                            @time, 
                                                            @Processing, 
                                                            @userName", Conn);
         cmd.Parameters.AddWithValue("@strbuff", strbuff);
         cmd.Parameters.AddWithValue("@time", time);
         cmd.Parameters.AddWithValue("@Processing", Processing);
         cmd.Parameters.AddWithValue("@userName", userName);
         cmd.ExecuteNonQuery();
    
         Conn.Close();
    }