У меня есть хранимая процедура с 13 параметрами в базе данных SQL Server.И в моем приложении C # мне нужно вставить данные в эту хранимую процедуру, и я могу вставлять по 1 значению за раз, но мне нужно иметь возможность вставлять несколько значений, таких как 5 или 10 или более.У меня есть 5 массивов, которые будут иметь много значений для вставки в эту хранимую процедуру, но не вставляются, если массивы имеют более 1 значения, я думаю, что мой цикл выполнен неправильно.
Пожалуйста, посмотрите ниже.
Класс, который создаст метод для хранимой процедуры
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BarcodeReceivingApp.Persistence;
using BarcodeReceivingApp.Persistence.Repositories;
namespace BarcodeReceivingApp.Functionality
{
public class StoredProcedureInsert
{
private readonly BarcodeReceivingFootPrintDbContext _barcodeReceivingFootPrintDbContext = new BarcodeReceivingFootPrintDbContext();
public void CallManualBlindBarcodeParsingEventRequestFootPrintProcedure(decimal actualPackagedAmount, int actualPackagedPackId, string lotLookupCode,
int warehouseId, int materialId, string vendorLotLookupCode, DateTime vendorLotManufactureDate,
DateTime vendorLotExpirationDate, int shipmentId, decimal netWeight,
decimal grossWeight, string serialLookupCode, string licensePlateLookupCode)
{
_barcodeReceivingFootPrintDbContext.Database
.ExecuteSqlCommand("EXEC noram_reporting.ManualBlindBarcodeParsingEventRequest " +
"@ActualPackagedAmount, @ActualPackagedPackId, @LotLookupCode, @WarehouseId, @MaterialId, @VendorLotLookupCode," +
"@VendorLotManufactureDate, @VendorLotExpirationDate, @ShipmentId, @netWeight, @grossWeight, @serialLookupCode, @licensePlateLookupCode",
new SqlParameter("@ActualPackagedAmount", actualPackagedAmount),
new SqlParameter("@ActualPackagedPackId", actualPackagedPackId),
new SqlParameter("@LotLookupCode", lotLookupCode),
new SqlParameter("@WarehouseId", warehouseId),
new SqlParameter("@MaterialId", materialId),
new SqlParameter("@VendorLotLookupCode", vendorLotLookupCode),
new SqlParameter("@VendorLotManufactureDate", vendorLotManufactureDate),
new SqlParameter("@VendorLotExpirationDate", vendorLotExpirationDate),
new SqlParameter("@ShipmentId", shipmentId),
new SqlParameter("@netWeight", netWeight),
new SqlParameter("@grossWeight", grossWeight),
new SqlParameter("@serialLookupCode", serialLookupCode),
new SqlParameter("@licensePlateLookupCode", licensePlateLookupCode)
);
}
}
}
Вот тогда я вызываю этот метод для вставки в каждый параметр
private void SendStoredProcedureDataToFootPrint()
{
var lotList = _connection.ParseLot();
var netWeightList = _connection.ParseNetWeight();
var grossWeightList = _connection.ParseGrossWeight();
var serialNumberList = _connection.ParseSerialNumber();
var material = _unitOfWork.Shipments.GetLastShipmentMaterialEntry();
var scanCounts = _connection.CountReceivingBarcodeEntries();
var packagingId = _unitOfWork.Materials.GetPackagingId();
var warehouse = _unitOfWork.Warehouses.GetWarehouseIdQuery();
var shipment = _unitOfWork.Shipments.GetLastShipmentIdEntry();
var licensePlate = _unitOfWork.LicensePlates.GetLastCreatedLicensePlate();
try
{
for (var i = 0; i < _connection.GetBarcodeList().Count ; i++)
{
_storedProcedureInsert.CallManualBlindBarcodeParsingEventRequestFootPrintProcedure(scanCounts, packagingId, lotList[i], warehouseId: warehouse, materialId: 5785,
vendorLotLookupCode: lotList[i], vendorLotManufactureDate: DateTime.Now,
vendorLotExpirationDate: DateTime.Now, shipmentId: shipment,
netWeight: Convert.ToDecimal(netWeightList[i]) / 100,
grossWeight: Convert.ToDecimal(grossWeightList[i]) / 100,
serialLookupCode: serialNumberList[i], licensePlateLookupCode: licensePlate);
}
}
catch (Exception exception)
{
MetroMessageBox.Show(null, exception.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
throw;
}
}
Итак, как и ясказал, что это работает, если я вставлю 1 данные для каждого параметра, но если в массивах lotlist, netweightlist, grossweightlist и serialnumberlist содержится более 1 данных, они не будут отправлены в хранимую процедуру.
Таким образом, цель состоит в том, чтобы вставить эти данныеНеважно, есть много записей, которые мне нужно вставить, это может быть одна или несколько одновременно.
Не удалось найти хорошее решение по этому вопросу в других вопросах, таких как stackoverflow или google.