public void ExtractTableParameters(string TableName, System.Data.IDbDataAdapter adapter, out DatabaseCache InsertCache, out DatabaseCache DeleteCache, out DatabaseCache UpdateCache, out DatabaseCache IsExistCache, out System.Data.DataTable dt) { adapter.SelectCommand.CommandText = "select top 1 * from " + TableName; DataSet ds = new DataSet(); dt = adapter.FillSchema(ds, SchemaType.Source)[0]; dt.TableName = TableName; OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter as OleDbDataAdapter); builder.ConflictOption = ConflictOption.OverwriteChanges; //builder.SetAllValues = false; OleDbCommand InsertCmd = builder.GetInsertCommand(true); builder.ConflictOption = ConflictOption.OverwriteChanges; InsertCache = new DatabaseCache(InsertCmd.CommandText, InsertCmd.Parameters); InsertCache.CurrentTable = dt; foreach (DataColumn c in dt.Columns) { if (c.AutoIncrement) { InsertCache.IsHaveAutoIncrement = true; InsertCache.SQL += ";Select @@IDENTITY;"; break; } } OleDbCommand UpdateCmd = builder.GetUpdateCommand(true); UpdateCache = new DatabaseCache(UpdateCmd.CommandText, UpdateCmd.Parameters); UpdateCache.CurrentTable = dt; OleDbCommand DeleteCmd = builder.GetDeleteCommand(true); DeleteCache = new DatabaseCache(DeleteCmd.CommandText, DeleteCmd.Parameters); DeleteCache.CurrentTable = dt; IsExistCache = new DatabaseCache(DeleteCmd.CommandText, DeleteCmd.Parameters); IsExistCache.CurrentTable = dt; IsExistCache.SQL = IsExistCache.SQL.Replace("DELETE FROM [" + TableName + "]", "Select count(1) from [" + TableName + "] with(nolock) "); }
protected void DbDataAdapter_FillSchema_Ds_SchemaType_Str(Sys.Data.Common.DbDataAdapter dbDA) { DataSet dsResult = new DataSet(); DataSet dsExpected = new DataSet(); // create expected dataset to compare result to ReadDBData_Fill(dbDA,ref dsExpected ,true); //dsExpected.Tables.Remove(dsExpected.Tables[1]); //execute FillSchema dsResult.Tables.Add("Table"); DataTable[] dtArr = dbDA.FillSchema(dsResult,SchemaType.Mapped,dsResult.Tables[0].TableName); //************ Fix .Net bug? (FillSchema method add AutoIncrement=true) ******************* dsResult.Tables[0].Columns["EmployeeID"].AutoIncrement = false; CompareResults_Fill(dsResult,dsExpected); Exception exp = null; try { BeginCase("Check return value - Table[0]"); Compare(dtArr[0],dsResult.Tables[0] ); } catch(Exception ex) {exp = ex;} finally {EndCase(exp); exp = null;} //close connection if ( ((IDbDataAdapter)dbDA).SelectCommand.Connection.State != ConnectionState.Closed ) ((IDbDataAdapter)dbDA).SelectCommand.Connection.Close(); }
protected void DbDataAdapter_FillSchema_Ds_SchemaType(Sys.Data.Common.DbDataAdapter dbDA) { DataSet dsResult = new DataSet(); DataSet dsExpected = new DataSet(); // create expected dataset to compare result to ReadDBData_Fill(dbDA,ref dsExpected ,true); // Note: When handling batch SQL statements that return multiple results, // the implementation of FillSchema for the .NET Framework Data Provider for OLEDB // retrieves schema information for only the first result. // To retrieve schema information for multiple results, use Fill with the MissingSchemaAction set to AddWithKey // if (dbDA.GetType() == typeof(Sys.Data.OracleClient.OracleDataAdapter)) // dsExpected.Tables.Remove(dsExpected.Tables[1]); //execute FillSchema //dsResult = dsExpected.Copy(); DataTable[] dtArr = dbDA.FillSchema(dsResult,SchemaType.Mapped ); //************ Fix .Net bug? (FillSchema method add AutoIncrement=true) ******************* dsResult.Tables[0].Columns["EmployeeID"].AutoIncrement = false; CompareResults_Fill(dsResult,dsExpected); Exception exp = null; try { BeginCase("Check return value - Table[0]"); Compare(dtArr[0],dsResult.Tables[0] ); } catch(Exception ex) {exp = ex;} finally {EndCase(exp); exp = null;} // if (dbDA.GetType() != typeof(Sys.Data.OracleClient.OracleDataAdapter)) // try // { // BeginCase("Check return value - Table[1]"); // Compare(dtArr[1],dsResult.Tables[1]); // } // catch(Exception ex) {exp = ex;} // finally {EndCase(exp); exp = null;} //close connection if ( ((IDbDataAdapter)dbDA).SelectCommand.Connection.State != ConnectionState.Closed ) ((IDbDataAdapter)dbDA).SelectCommand.Connection.Close(); }