Ответ 1
Вы не можете использовать любую переменную типа SqlParameterCollection
(ссылочный объект) без вызова своего конструктора (new), но SqlParameterCollection
- это объект, который нельзя инициализировать напрямую с помощью нового. Он не имеет конструктора по умолчанию и может быть извлечен только из существующего SqlCommand
.
SqlCommand cmd = new SqlCommand(commandText, connection);
SqlParameterCollection sp = cmd.Parameters;
Я предлагаю изменить ваш метод InsertData
, чтобы принять List<SqlParameter>
и позволить ему обрабатывать добавление параметров в SqlCommand
, который выполняет текст команды
List<SqlParameter> sp = new List<SqlParameter>()
{
new SqlParameter() {ParameterName = "@CmpyCode", SqlDbType = SqlDbType.NVarChar, Value= CV.Global.CMPYCODE},
new SqlParameter() {ParameterName = "@Code", SqlDbType = SqlDbType.NVarChar, Value = codeName},
new SqlParameter() {ParameterName = "@DisplayCode", SqlDbType = SqlDbType.NVarChar, Value = codeName + "-"},
new SqlParameter() {ParameterName = "@TotalDigit", SqlDbType = SqlDbType.Int, Value = CV.Global.PARAMTOTALDIGIT}
};
insertData(CV.Sps.SP_INSERT_PARAM_TABLE, sp);
и InsertData
просто получает необязательный список SqlParameter и при необходимости добавляет их во внутреннюю коллекцию параметров SqlCommand
internal static int insertData(string spName, List<SqlParameter> sp = null)
{
....
if(sp != null)
cmd.Parameters.AddRange(sp.ToArray());
....
}