他の目的で、巨大なデータベースを oracle データソースから mysql データソースに同期しています。Linux/Oracle データベースで PuTTY を使用してデータを読み取る場合、値は
8888888888
これはオブジェクトに格納され、MySQL に挿入され、最終的には
00000000000000000000000000000000000000000000000000000000000000000000008888888888
残念ながら、私はプログラミングのヒーローではなく、問題を理解できないようです。両方のデータベースのデータ型は int(10) であり、C# アプリケーションが値を改ざんすることはありません。実際のエラー メッセージは次のとおりです (ステートメントの無関係な部分は省略されています)。
Error while executing query
INSERT INTO tsdsmd(kode8)
VALUES ('00000000000000000000000000000000000000000000000000000000000000000000008888888888')
Out of range value for column 'kode8' at row 1
文字セットの不一致でしょうか?
これは挿入コマンドを構築するコードです
public int Insert(string table, string[] fields, object[] values)
{
if (fields.Length != values.Length)
throw new DBException("Field lengt is not equal to values length!");
StringBuilder query = new StringBuilder();
query.Append("INSERT INTO ");
query.Append(table);
query.Append("( ");
for (int i = 0; i < fields.Length; i++)
{
query.Append(fields[i]);
if (i != fields.Length - 1)
{
query.Append(", ");
}
}
query.Append(") VALUES (");
for (int i = 0; i < fields.Length; i++)
{
query.Append("@" + fields[i]);
if (i != fields.Length - 1)
{
query.Append(", ");
}
}
query.Append(")");
DBCommand command = new DBCommand(query.ToString());
for (int i = 0; i < fields.Length; i++)
{
command.AddParameter("@" + fields[i], values[i]);
}
return Insert(command);
}
編集; コードの一部を変更し、別の try catch を使用している間、これらの行をスキップしています。見てください、これが私が見ているものです。値は int の範囲内にある必要があり、私はとても混乱しています。潜在的なバグ?int32にはintが小さすぎるか大きすぎるというエラーが表示されます。そうであってはなりません。