У меня есть хранимая процедура , которая вставляет / обновляет записи в таблице БД.
У меня также есть веб-сервис, который должен передавать много новых обновлений каждые пару секунд в базу данных.
Я хочу добиться этого без существенного снижения производительности, однако я не уверен, как лучше всего подойти к этой проблеме.
Вот мой код (максимально упрощенный)
* Примечание. Я использую таблицу данных, поскольку одним из параметров, используемых хранимой процедурой, является пользовательский Определяемый пользователем тип таблицы из БД.
public class DBWorker
{
public void Update(IEnumerable<UpdateModel> updates)
{
using (SqlConnection connection = new SqlConnection(this._connectionString))
using (SqlCommand command = new SqlCommand(this._storedProcedureString, connection) { CommandType = CommandType.StoredProcedure })
{
foreach (var update in updates)
{
command.Parameters.Add("@EntryID", SqlDbType.Int).Value = update.EntryID;
command.Parameters.Add("@Type", SqlDbType.Int).Value = update.Type;
DataTable dataTable = new DataTable();
dataTable.Columns.Add("ParamID");
dataTable.Columns.Add("Value");
DataRow row = dataTable.NewRow();
row["ParamID"] = update.ParamID;
row["Value"] = update.Value;
dataTable.Rows.Add(row);
command.Parameters.Add("@NameValues", SqlDbType.Structured).Value = dataTable;
command.ExecuteNonQuery();
}
}
}
}
public class UpdateModel
{
public int EntryID { get; set; }
public int Type { get; set; }
public int ParamID { get; set; }
public string Value { get; set; }
}
Моя основная проблема в том, что приведенный выше код будет выполнять запрос для каждого обновления и значительно замедлит мой DP, если у меня будет много обновлений. Можно ли как-нибудь вызвать хранимую процедуру в каком-то режиме " bulk ".
Я думал о создании таблицы данных со всеми моими результатами, а затем каким-то образом передать ее хранимой процедуре, но я не уверен, что это приведет к фактическому улучшению производительности, и не имею представления о том, как ее реализовать.
Не уверен, имеет ли это значение, но это структура таблицы, которую фактически обновляет SP:
- ID - int, личность, PK
- EntryID - int, notnull
- Тип - int, notnull
- ParamID - int, notnull
- Значение - varchar, notnull