Jon McKee
Давайте разберем ошибку:
No mapping
Таким образом, мы имеем дело с некоторым преобразованием между ценностями.
System.Int32[]
Таким образом, исходные данные имеют тип
int32[]
что бы это было
diagnostic_data
учитывая ваш код.
known managed provider native type.
Тип, о котором знает используемый вами адаптер SQL (поставщик) для базы данных. Например, он не знает типа базы данных, который он может использовать в этой ситуации.
Итак, собирая все это вместе:
int32[]
не имеет собственного типа базы данных, в который он может быть преобразован. Это имеет полный смысл. Когда вы используете
AddWithValue
, вы создаете
Объект sqlparameter[
^]. -
SqlParameter
обрабатывается как одно литеральное значение по соображениям безопасности (sql-инъекция). Поскольку массив целых чисел не имеет очевидного
одиночный буквальное значение, которое он может преобразовать в, вы получите ошибку.
Так как же это исправить? Мне скорее нравится
это решение[
^] найдено прямо здесь, на CodeProject. Вы также можете вручную построить массив SqlParameters, что-то вроде:
SqlCommand cmd = new SqlCommand("INSERT INTO Table_1 VALUES(@value0, @value1)"); /*add however many values you need*/
List<SqlParameter> commands = new List<SqlParameter> {
new SqlParameter("@value0", diagnostic_data[0]),
new SqlParameter("@value1", diagnostic_data[1])
//etc..
};
cmd.Parameters.AddRange(commands);
Однако, насколько мне известно, нет никакого способа сделать это с одним параметром из-за того, как параметры обрабатываются для обеспечения безопасности.