【发布时间】:2013-03-07 15:31:23
【问题描述】:
我正在将一个庞大的数据库从它的 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 的范围内,我很困惑。潜在的错误?它给我的错误是int对于int32来说太小或太大。不应该是这样。
【问题讨论】:
-
This is stored into a string为什么?怎么样? -
抱歉把你的帖子弄糊涂了 Davide。我在我的 iPhone 上回复。是否将 0 添加到插入语句中?
-
@Brian 不,他们不是。我添加了创建插入语句的 C# 代码。
-
@Sebas:Oracle 确实理解数据类型
integer(您可以在create table语句中使用它)。它只是number(22)的别名:sqlfiddle.com/#!4/60926/1 -
@a_horse_with_no_name,是的,但是 INT(10) 失败。那是我的观点。整件事就是要指出,腻子提取物是无关紧要的。
标签: c# mysql sql oracle .net-3.5