我有一张包含少量记录的dataTable
,但是它已经断开连接。
我正在使用下面的方法来获取dataTable
。
static System.Data.DataTable ReadSetUpTable(string queryStr,SqlConnection sc)
{
try
{
var command = new SqlCommand()
{Connection = sc, CommandText = queryStr};
var dataAdapter = new SqlDataAdapter() {SelectCommand = command};
var dataTable = new System.Data.DataTable();
dataAdapter.Fill(dataTable);
return dataTable;
}
catch (Exception)
{
throw;
}
}
到目前为止还没有问题。
我想知道的是是否有一种简单的方法,可以使用不同的连接字符串将这个 dataTable
填充到另一个模式中。
针对本帖,假设有一个具有两列的表格。
Create Table Student(StudentId NUMBER(6), StudentName varchar2(50));
我希望使用上面代码中的dataTable
填充这个表格。
我可以使用一个命令对象和一个插入语句来实现。例如,这段代码:
static int LoadDataTable(OracleConnection oc, System.Data.DataTable dataTable)
{
try
{
var command =
new OracleCommand
{
CommandText = "INSERT INTO STUDENT (STUDENTID, STUDENTNAME) VALUES(:studentid, :studentname)",
CommandType = CommandType.TableDirect,
Connection = oc
};
var op1 =
new OracleParameter
{
ParameterName = "StudentId",
Size = 6,
OracleDbType = OracleDbType.Int32,
Direction = System.Data.ParameterDirection.Input
};
command.Parameters.Add(op1);
var op2 =
new OracleParameter
{
ParameterName = "studentName",
OracleDbType = OracleDbType.Varchar2,
Size = 50,
Direction = System.Data.ParameterDirection.Input
};
command.Parameters.Add(op2);
/*
foreach (var row in dataTable.Rows)
{
op1.Value = int.Parse(row[0].ToString());
op2.Value = row[1].ToString();
command.ExecuteNonQuery();
}*/
foreach (System.Data.DataRow row in dataTable.Rows)
{
row.SetAdded();
}
var dataAdapter = new OracleDataAdapter() {InsertCommand = command};
dataAdapter.Update(dataTable); //This updates the table, but all column values are NULL.
}
catch(Exception)
{
throw;
}
}
有没有更快更简单的方法,我不需要遍历记录?
dataTable.AcceptChanges()
会有效地将所有的rows
设置为已添加吗? - IAbstractAcceptChanges()
会将所有标记为“已添加”、“已修改”等状态的行设置为“未更改”。在调用了oracleDataAdapter.Update(dataTable)
并且所有行都成功更新后,您需要调用AcceptChanges()
(使用 DataTable 的HasErrors
属性来确定是否有任何行失败)。 - James King