我尝试从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语句中。如果有人能指引我做正确的方法,我将不胜感激。
答案 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());