Если я угадал право на то, что вы пытаетесь сделать, вы хотите сделать это:
Вы хотите добавить еще один параметр, и необходимо изменить значение параметра в петле.
var db2Cmd = new OdbcCommand("INSERT INTO presnlats (LAT) VALUES (@Lat)", db2Conn);
db2Cmd.Parameters.AddWithValue("@Lat", 0);
for (int j = 0; j < reader.FieldCount; ++j)
{
db2Cmd.Parameters["@Lat"].Value = reader[j];
Console.Out.WriteLine(db2Cmd.ExecuteNonQuery());
}
Добавлено
У вас есть только один заполнитель (@Lat) для вашего параметра в команде, так что вы должны добавлять только один параметр. Ваш код добавляет новый параметр для каждого объекта в читателе . Ни один из этих параметров не будет называться «@Lat», если только ваш читатель не возвращает значение @Lat.
Я все еще довольно уверен, что вам нужен один параметр (@Lat), и вам нужно изменить значение параметра в цикле.
Разъяснение синтаксис использования parameteized запросов, рассмотрим это утверждение:
cmd.CommandText = «Вставьте в лицо (FirstName, LastName) Значения (@fName, @lName)
В приведенном выше заявлении, @fName и @lName НЕ являются параметрами Они заполнители для параметров
Вы должны затем явно добавлять используя Счетчик следующих правил:..
- Параметры должны быть указаны точно так же, как и заполнители
- Парматеры должны быть добавлены в правильном порядке.
Так более полный пример будет
cmd.CommandText = "Вставьте в Person (FirstName, LastName) Значения (@fName, @lName)
cmd.Parameters.AddWithValue (" @ fName "," David "); // Эта строка в этом контексте говорит:« Отмените параметр palceholder из предыдущей строки этим фактическим параметром. cmd.Parameters.AddWithValue ("@ lName", "Stratton"); // аналогичным образом это заменяет местозаполнитель @lname.
Тогда, если у меня есть datareader, у которого есть куча имен, я могу повторно назначить VALUE от читателя к VALUE параметра.
в то время как (myReader.Read()) { cmd.Parameters [ "@ Fname '] Значение = myReader.GetString. ("FirstNameField"); cmd.Parameters [" @ LName'.] Значение = MyReader .GetString ("LastNameField"); cmd.ExecuteNonQuery();
Возьмите это сработало? Иногда простые решения работают лучше всего :-) – tomfanning
+1 для в одном порядке – walterhuang