[困惑了一整天的问题]关于OleDbDataAdapter.UpDate()的奇怪现象,请教各位!
维她奶 2004-11-05 05:25:29 项目开发中需要实现从Oracle数据库读取数据,然后保存到本地的Access中。
我使用的方法是:
(Step 1)
DataSet tmpDs = new DataSet();
//OracleDb是一个数据接口,SQLSelect()执行Sql语句并返回一个Dataset;
tmpDs = OracleDB.SQLSelect("select * from userInfo");
//执行了上面的语句之后,已经从Oracle获取了数据;
string cnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " + "c:\\data.mdb";
OleDbConnection cn = new OleDbConnection(cnStr);
OleDbDataAdapter da = new OleDbDataAdapter("select * from userInfo",cn);
//data.mdb中的表userInfo结构和Oracle中的表userInfo完全相同;
OleDbCommandBuilder cmb = new OleDbCommandBuilder(da);
da.Update(tmpDs,tmpDs.Tables[0].TableName);
(Step 2)
//执行完Update()操作之后,没有任何异常产生,但也没有把tmpDs中的数据Update进去
//但是如果用以下方法手工产生一个结构和表userInfo相同的DataSet,却可以把数据更新进去:
DataColumn tmpCol;
DataRow tmpRow;
DataTable tmpDt = new DataTable("uInfo");
DataSet tmpDs2 = new DataSet();
tmpCol = new DataColumn("id",Type.GetType("System.Int32"));
tmpDt.Columns.Add(tmpCol);
tmpCol = new DataColumn("userName",Type.GetType("System.String"));
tmpDt.Columns.Add(tmpCol);
tmpCol = new DataColumn("userAge",Type.GetType("System.Decimal"));
tmpDt.Columns.Add(tmpCol);
tmpCol = new DataColumn("userDefine",Type.GetType("System.Decimal"));
tmpDt.Columns.Add(tmpCol);
tmpCol = new DataColumn("userAddr",Type.GetType("System.String"));
tmpDt.Columns.Add(tmpCol);
tmpCol = new DataColumn("RegDate",Type.GetType("System.DateTime"));
tmpDt.Columns.Add(tmpCol);
tmpRow = tmpDt.NewRow();
tmpRow["id"] = "20";
tmpRow["userName"] = "Young";
tmpRow["userAge"] = "21";
tmpRow["userDefine"] = "222.000";
tmpRow["userAddr"] = "aaaaaaaaa";
tmpRow["RegDate"] = "2002-11-11";
tmpDt.Rows.Add(tmpRow);
tmpDs2.Tables.Add(tmpDt);
da.Update(tmpDs2,tmpDs2.Tables[0].TableName);
(Step 3)
//这样就可以把tmpDs2的数据更新进mdb中
//之后就我发现了迷惑了我一下午的问题:
tmpDs = OracleDB.SQLSelect("select * from userDetail");
da.Update(tmpDs,tmpDs.Tables[0].TableName);
//注意,这里是从表userDetail读取数据,然后在更新mdb中的表userInfo(两个表的结构是完全不同的),但这个时候却没有异常产生,但也没把数据更新进去,而如果在用手工生成一个结构和userDetail的DataSet(如Step 2中一样)就会出现异常,这是为什么?
望各位高手解答呀!!!