Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我们应该使用带有表参数的单执行存储过程,还是使用带有分离参数的多执行过程?_C#_Sql_Performance_Stored Procedures_Processing Efficiency - Fatal编程技术网

C# 我们应该使用带有表参数的单执行存储过程,还是使用带有分离参数的多执行过程?

C# 我们应该使用带有表参数的单执行存储过程,还是使用带有分离参数的多执行过程?,c#,sql,performance,stored-procedures,processing-efficiency,C#,Sql,Performance,Stored Procedures,Processing Efficiency,我正在开发WinForms桌面应用程序。在这个应用程序上,我必须对SQL Server数据库进行一些更新。我可以使用带有表参数的存储过程来实现这一点 comm.CommandType = CommandType.StoredProcedure; comm.Parameters.AddWithValue("@changes", changes.ToTable(false, "ItemNo", "Info")); 然后执行过程一次,或者使用循环使用字符串参数多次执行过程 for (...) {

我正在开发WinForms桌面应用程序。在这个应用程序上,我必须对SQL Server数据库进行一些更新。我可以使用带有表参数的存储过程来实现这一点

comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.AddWithValue("@changes", changes.ToTable(false, "ItemNo", "Info"));
然后执行过程一次,或者使用循环使用字符串参数多次执行过程

for (...)
{
   ...
   comm.CommandType = CommandType.StoredProcedure;
   comm.Parameters.AddWithValue("@Item", "Item 1"));`
   comm.Parameters.AddWithValue("@Info", "Info 1"));`
   int i = comm.ExecuteNonQuery();
   ...
}

哪一种是最好的做法?

我会使用第一种方法,并将所有数据作为表类型变量发送,即使您正在执行一个简单的
更新操作


原因在这种情况下,您可以通过使用table type变量执行
join
来执行
update join
,并且可以一次更新多个记录。至少,您将保存对数据库的多个调用。

了解您在该存储过程中执行的操作非常重要。如果只是插入/更新少数记录,我就不会使用存储过程,而是使用正确的参数化书面查询(当然不会使用AddWithValue)。存储过程不包含任何复杂的操作,只是一个简单的更新。我不会在应用程序中使用SQL查询来保持应用程序层的分离,因此您的建议对我的情况没有帮助。您也可以传入XML并将其作为一个批处理进行更新。