更新语句出现问题

时间:2011-07-01 03:46:57

标签: c# asp.net sql

我希望每次进入特定页面时语句都会将数据库更新为1 ..但它似乎更新为3 :(

   public static void UpdateThreadView(int threadID)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("UPDATE  dbo.Threads");
    sb.Append(" SET Views=(Views+1)");
    sb.Append(" WHERE ThreadsID=@ThreadID");

    string myConnectionString = AllQuestionsPresented.connectionString;

    using (SqlConnection myConnection = new SqlConnection(myConnectionString))
    {
        myConnection.Open();
        SqlCommand sqlCommand = new SqlCommand(sb.ToString(), myConnection);
        sqlCommand.Parameters.Add("@ThreadID", SqlDbType.Int);
        sqlCommand.Parameters["@ThreadID"].Value = threadID;
        sqlCommand.ExecuteNonQuery();

    }
}

2 个答案:

答案 0 :(得分:2)

在代码中设置断点并在visual studio调试器中运行。

由于回发和事件的组合,我打赌这次被调用3次。

或者,您可以使用SQL事件探查器查看是否发生了多次更新。

答案 1 :(得分:1)

火花的建议非常好。学习了解调试器。您可以使用断点和立即窗口进行一些真正的甜蜜事情,这将有助于您提高效率。

在网站上注意。你如何使用Stringbuilder效率不高。一般来说,除非你在循环中做事,否则避免使用stringbuilder,因为创建它有一些开销。

var str = "UPDATE  dbo.Threads" 
          + " SET Views=(Views+1)"
          + " WHERE ThreadsID=@ThreadID"; 

这种类型的代码将由编译器优化为无论如何都是一个字符串赋值。我创建了一个小测试,显示在1000000次迭代中,stringbuilder需要467 ms而字符串连接需要8次。它不会杀死你的应用程序,但可能很有用。