2014-03-31 56 views
1

我试图从一个Oracle数据库中获取多个表中的数据并将其插入到一个sql数据库中。我遇到的问题是我正在读取几乎50列所有不同数据类型的数据。然后我继续将这些单独的列值插入到SQL语句中,然后将数据插入到sql数据库中。所以算法中看起来是这样的:自动检测Oracle数据类型

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语句中。如果有人能指导我以正确的方式做到这一点,我将不胜感激。

回答

0

数据读取器具有中性GetValue方法返回一个objectSqlCommand具有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());