因此,我需要使用TextBox
中给出的数据更新后面代码中的asp.net Web表单项目中的超过100万条记录。我尝试用LINQ做到这一点,但这需要很长时间......
第一个问题:什么是最佳解决方案?
我注意到如果我在SQL(MSSQL)中运行更新,它只需要20-30秒,这是一个可接受的时间。
第二个问题:我应该在SQL中创建过程并将其导入我的项目并调用这些过程吗?这会给我一个更好的时间吗?基本上,使用导入的过程会使时间缩短到接近查询在SQL中运行所需的时间吗?
答案 0 :(得分:0)
如果通过普通查询运行它更快,请创建一个接受参数的存储过程:
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();
}
}
答案 1 :(得分:0)
存储过程应该是最佳解决方案。
但是,您可以使用ADO.NET调用这些存储过程,而无需在项目中导入它们。
存储过程是SQL注入安全的
答案 2 :(得分:0)
使用它可以在您的应用上获得高性能:
1)在调用时创建一个接受TVP(Table-Valued-Parameter)的存储过程。
2)确保您的TVP使用与列数据类型匹配的表值数据类型与目标表的预期索引(因此SQL可以有效地使用索引或任何所需的索引)。
3)在proc中使用正确的事务隔离级别。例如," READ COMMITTED",它提供了良好的响应。
4)在你的存储过程中添加" SET NOCOUNT ON",这样每次执行T-SQL语句时proc都不会发出ADO.Net信号。
5)在SqlConnection对象上(在C#中),将PacketSize属性设置为3000到8000之间的值。使用这些值,直到获得正确的响应时间。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.packetsize.aspx