我有一個斷開的dataTable
,它包含幾條記錄。使用DataAdapter填充表
我使用以下函數來獲取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
,我在上面的代碼表。
我可以用命令Object和insert語句來做到這一點。例如,下面的代碼:
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;
}
}
有沒有更快,更簡單的方法,我不必循環記錄?
@James B - 您在哪裏將dataAdapter的數據源設置爲dataTable? – abhi 2011-04-26 20:57:11
@James:將'dataTable.AcceptChanges()'有效地將所有'行'設置爲已添加? – IAbstract 2011-04-26 21:08:09
您不......就像您調用dataAdapter.Fill(dataTable)一樣,您可以調用oracleDataAdapter.Update(dataTable)。 – 2011-04-26 21:10:56