我希望每次进入特定页面时语句都会将数据库更新为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();
}
}
答案 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次。它不会杀死你的应用程序,但可能很有用。