私があなたがやろうとしていることを正しく推測しているなら、あなたはこれをしたいです:
1つのパラメーターを追加し、ループ内のパラメーターのVALUEを変更する必要があります。
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)が1つしかない ため、パラメーターを1つだけ追加する必要があります。コードは、リーダー内のすべてのオブジェクトに新しいパラメーターを追加しています。リーダーが@Latの値を返さない限り、これらのパラメーターのいずれにも「@Lat」という名前は付けられません。
私はまだ、1つのパラメーター(@Lat)が必要であり、ループ内のパラメーターの値を変更する必要があることを確信しています。
パラメータ化されたクエリを使用する構文を明確にするために、次のステートメントを検討してください。
cmd.CommandText = "Insert Into Person(FirstName、LastName)Values(@fName、@lName)
上記のステートメントでは、@fNameと@lNameはパラメーターではありません。これらはパラメータのプレースホルダーです。
次に、次のルールを使用してパラメータを明示的に追加する必要があります。
- パラメータには、プレースホルダーとまったく同じ名前を付ける必要があります
- パーマターは正しい順序で追加する必要があります。
したがって、より完全な例は次のようになります
cmd.CommandText = "Insert Into Person(FirstName、LastName)Values(@fName、@lName)
cmd.Parameters.AddWithValue( "@ fName"、 "David"); //この行は、このコンテキストでは、「前の行のパラメーターpalceholderをこの実際のパラメーターで置き換えます。cmd.Parameters.AddWithValue( "@ lName"、 "Stratton"); //同様に、これは@lnameプレースホルダーを置き換えます。 。
次に、多数の名前を持つデータリーダーがある場合、リーダーからのVALUEをパラメーターのVALUEに繰り返し割り当てることができます。
while(myReader.Read()){cmd.Parameters ["@fName']。Value=myReader.GetString(" FirstNameField ");cmd.Parameters["@lName']。Value=myReader.GetString( "LastNameField") ; cmd.ExecuteNonQuery();
}