Эффективная итерация по коллекции SqlCommand.Parameters при вызове хранимых процедур в циклах.C#

Место общения программистов C#
Anonymous
Эффективная итерация по коллекции SqlCommand.Parameters при вызове хранимых процедур в циклах.

Сообщение Anonymous »

Мой первоначальный подход к вызову хранимых процедур SQL Server соответствует следующему шаблону (упрощенному):

Код: Выделить всё

using(  SqlConnection   cn =    new SqlConnection( Utils.sSqlConn )  )
using(  SqlCommand      cm =    Utils.NewSqlCmdProc( cn, DA.prUser_InsUpd )  )
{
cm.Parameters.Add( "idUser",    SqlDbType.Int       ).Direction =   ParameterDirection.InputOutput;
cm.Parameters.Add( "sUser",     SqlDbType.VarChar,32    );
cm.Parameters.Add( "sName",     SqlDbType.VarChar,64    );
cm.Parameters.Add( "idLvl",     SqlDbType.TinyInt       );
cm.Parameters.Add( "sCode",     SqlDbType.VarChar,32    );
cm.Parameters.Add( "bActive",   SqlDbType.Bit           );

try
{   cn.Open( );
foreach(  User item in ls  )                        /// ls =is= List
if(  item.IsDirty  &&  item.IsValid( sb )  )    /// save every modified item
{
int     i =     0;
cm.Parameters[   i ].Value =    item.idUser;
cm.Parameters[ ++i ].Value =    item.sUser;
cm.Parameters[ ++i ].Value =    DA.DbNullStr( item.sName );
cm.Parameters[ ++i ].Value =    item.idLvl;
cm.Parameters[ ++i ].Value =    DA.DbNullStr( item.sCode );
cm.Parameters[ ++i ].Value =    item.bActive;

cm.ExecuteNonQuery( );

item.idUser =   (int) cm.Parameters[ 0 ].Value;     /// 

Подробнее здесь: [url]https://stackoverflow.com/questions/79786694/efficient-iteration-over-sqlcommand-parameters-collection-when-stored-procedures[/url]

Вернуться в «C#»