CommandBuilder的使用
public static bool SaveDB(DataTable DT, string SqlText)
{
try
{
OracleConnection conn = new OracleConnection(OracleHelper.connectionString);
OracleDataAdapter oda = new OracleDataAdapter(SqlText, conn);
OracleCommandBuilder ocb = new OracleCommandBuilder(oda);
oda.InsertCommand = ocb.GetInsertCommand();
oda.DeleteCommand = ocb.GetDeleteCommand();
oda.UpdateCommand = ocb.GetUpdateCommand();
oda.Update(DT);
return true;
}
catch (OracleException exx)
{
MessageBox.Show("数据库操作失败!" + exx.Message);
return false;
}
}
什么时候该用commandbuilder {
try
{
OracleConnection conn = new OracleConnection(OracleHelper.connectionString);
OracleDataAdapter oda = new OracleDataAdapter(SqlText, conn);
OracleCommandBuilder ocb = new OracleCommandBuilder(oda);
oda.InsertCommand = ocb.GetInsertCommand();
oda.DeleteCommand = ocb.GetDeleteCommand();
oda.UpdateCommand = ocb.GetUpdateCommand();
oda.Update(DT);
return true;
}
catch (OracleException exx)
{
MessageBox.Show("数据库操作失败!" + exx.Message);
return false;
}
}
1 commandbuilder只适合single table,不适合用在复杂的关系上
2 每次build的时候,它都会连接到数据库,取得相关信息,才能得到 update,delete,insert命令,对性能会有影响
3 如果是固定的表、固定的操作可以直接写dataadapter的update,insert,delete命令。因为表的字段可能很多,工作量大(as mentioned before),VS.NET提供了visual的方法编辑dataadapter,当你把dataadapter控件拖到design上的时候,就会出 现设置的向导,减少工作量
commandbuilder适合动态的操作,性能会损失