Эта ошибка не имеет ничего общего с вашим SQL.
Ошибка в строке, отмеченной звездочкой в вашем сообщении.
fin.PalletNumber = Convert.ToInt32(txtSearchPallet.Text);
Если txtSearchPallet.Text пуст, вы пытаетесь преобразовать пустую строку в целое число, и это то, что дает вам «Входная строка была не в правильном формате». исключение.
Прежде всего вам необходимо определить, является ли номер поддона пустой строкой, и присвоить -1 (скажем) вашему экземпляру FillInEntity.
например.
fin.PalletNumber =
(txtSearchPallet.Text == "") ? -1 : Convert.ToInt32(txtSearchPallet.Text);
Это остановит исключение.
Тогда я бы продолжил следующим образом:
Измените строку, присваивающую значение параметра следующему
DbParameter pallet = cmd.Parameters.Add("@PalletNumber", SqlDbType.Int);
if (fin.PalletNumber == -1)
pallet.Value = DBNull.Value
else
pallet.Value = fin.PalletNumber
Измените сохраненный процесс так, чтобы @PalletNumber имел тип данных int
, а предложение where
было
WHERE
(
SerialNumber LIKE @SerialNumber + '%'
AND
(
@PalletNumber is null
or
PalletNumber = @PalletNumber
)
)