因此,我需要使用TextBox
. 我试图用 LINQ 做到这一点,但这需要很长时间......
第一个问题:最好的解决方案是什么?
我注意到,如果我在 SQL (MSSQL) 中运行更新,它只需要 20-30 秒,这是可以接受的时间。
第二个问题:我应该在 SQL 中创建程序并将它们导入我的项目并调用程序吗?这会给我更好的时间吗?基本上,使用导入的过程是否会缩短该查询在 SQL 中运行所需的时间?
因此,我需要使用TextBox
. 我试图用 LINQ 做到这一点,但这需要很长时间......
第一个问题:最好的解决方案是什么?
我注意到,如果我在 SQL (MSSQL) 中运行更新,它只需要 20-30 秒,这是可以接受的时间。
第二个问题:我应该在 SQL 中创建程序并将它们导入我的项目并调用程序吗?这会给我更好的时间吗?基本上,使用导入的过程是否会缩短该查询在 SQL 中运行所需的时间?
如果通过普通查询运行它更快,请创建一个接受参数的存储过程:
using (SqlConnection con = new SqlConnection("connection string here")) {
using (SqlCommand cmd = new SqlCommand("sp_Stored_Proc_Name_Here", con)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@VariableNameHere", SqlDbType.VarChar).Value = textBoxNameHere.Text;
con.Open();
cmd.ExecuteNonQuery();
}
}
存储过程应该是最好的解决方案。
但是,您可以使用 ADO.NET 调用这些存储过程,而无需将它们导入您的项目中。
存储过程是 SQL 注入安全的
使用它在您的应用程序上获得高性能:
1) 创建一个在调用它时接受 TVP(表值参数)的存储过程。
2) 确保您的 TVP 使用与目标表的预期索引匹配的列数据类型中的表值数据类型(以便 SQL 可以有效地使用索引或任何所需的内容)。
3)在您的过程中使用正确的事务隔离级别。例如,“READ COMMITTED”,它给出了很好的响应。
4) 将“SET NOCOUNT ON”添加到您的存储过程中,因此每次执行 T-SQL 语句时,该过程都不会向 ADO.Net 发出信号。
5) 在您的 SqlConnection 对象上(在 C# 中),将 PacketSize 属性设置为介于 3000 和 8000 之间的某个值。使用这些值直到获得正确的响应时间。http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.packetsize.aspx