自动检测Oracle数据类型

时间:2014-03-31 21:47:32

标签: c# sql sql-server oracle ssis

我尝试从Oracle数据库中的多个表中获取数据并将其插入到sql db中。我遇到的问题是我正在获取所有不同数据类型的近50列数据。然后我继续将这些单独的列值插入到SQL语句中,然后将该数据插入到sql db中。因此算法看起来像这样:

Fetch row data{
 create a variable for each individual column value ( int value = reader.getInt32(0); )
 add a sqlparameter for it (command.Parameters.Add(new SqlParameter("value", value)); )
 once all the 50 or so variables have been created make a sql statement
 Insert into asdf values (value,........)
}

对于一个包含< 10列的表,这样做似乎没问题,但是当它超过这个长度时,这个过程看起来很乏味且无关紧要。我想知道是否有更简单的方法来执行此操作,如获取行数据并自动确定列数据类型并自动创建varialbe并自动插入到sql语句中。如果有人能指引我做正确的方法,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

数据阅读器具有中性GetValue方法,返回object,而SqlCommand具有AddWithValue方法,无需指定参数类型。

for (int i = 0; i < reader.VisibleFieldCount; i++) {
    object value = reader.GetValue(i);
    command.Parameters.AddWithValue("@" + i, value);
}

您也可以自动创建SQL命令

var columns = new StringBuilder();
var values = new StringBuilder();
for (int i = 0; i < reader.VisibleFieldCount; i++) {
    values.Append("@").Append(i).Append(", ");
    columns.Append("[").Append(reader.GetName(i)).Append("], ");
}
values.Length -= 2;    // Remove last ", "
columns.Length -= 2;
string insert = String.Format("INSERT INTO myTable ({0}) VALUES ({1})",
                              columns.ToString(), values.ToString());