/// <summary> /// This method creates a sample database and write data for demonstration with data/oil.mod /// </summary> /// <param name="configuration">The data source configuration</param> internal static void CreateDefaultSampleDatabase(CustomDataSourceConfiguration configuration) { Console.WriteLine("Creating default sample database."); SqlWriter writer = new SqlWriter(configuration, null); using (DbConnection con = DbUtils.CreateConnection(configuration)) { con.Open(); // Creates the OilData table String OilData = "OilData"; writer.DropTable(con, OilData); String[] OilColumnsDef = { "NAME VARCHAR(30)", "CAPACITY INT", "PRICE DECIMAL(6,2)", "OCTANE DECIMAL(6,2)", "LEAD DECIMAL(6,2)"}; writer.CreateTable(con, OilColumnsDef, OilData); object[][] OilValues = { new object[] { "Super", 3000, 70, 10, 1 }, new object[] { "Regular", 2000, 60, 8, 2 }, new object[] { "Diesel", 1000, 50, 6, 1 } }; String insertCommand = @"INSERT INTO OilData(NAME, CAPACITY, PRICE, OCTANE, LEAD) VALUES (@v0, @v1, @v2, @v3, @v4)"; WriteTableData(con, insertCommand, OilValues); // Creates the GasData table String GasData = "GasData"; writer.DropTable(con, GasData); String[] GasColumnsDef = { "NAME VARCHAR(30)", "DEMAND INT", "PRICE DECIMAL(6,2)", "OCTANE DECIMAL(6,2)", "LEAD DECIMAL(6,2)"}; writer.CreateTable(con, GasColumnsDef, GasData); object[][] GasValues = { new object[] { "Super", 3000, 70, 10, 1 }, new object[] { "Regular", 2000, 60, 8, 2 }, new object[] { "Diesel", 1000, 50, 6, 1 } }; insertCommand = @"INSERT INTO GasData(NAME, DEMAND, PRICE, OCTANE, LEAD) VALUES (@v0, @v1, @v2, @v3, @v4)"; WriteTableData(con, insertCommand, GasValues); } } // CreateDefaultSampleDatabase
static void Main(string[] args) { // Assume we run in bin/Debug or bin/Release const string DATADIR = "../.."; int status = 127; CommandLineParser parser = new CommandLineParser(); // set some default values for the sample parser.modelFileName = DATADIR + "/data/oil.mod"; parser.configurationFileName = DATADIR + "/data/db_mssql.xml"; parser.Parse(args); // set default datafilename if none specified if (parser.dataFileNames.Count == 0) { parser.dataFileNames.Add(DATADIR + "/data/oil.dat"); } // parse the data source configuration CustomDataSourceConfiguration configuration = new CustomDataSourceConfiguration(parser.configurationFileName); // if this is the default sample, write some default data if (parser.CreateSampleDatabase) { CreateDefaultSampleDatabase(configuration); } try { OplFactory.DebugMode = true; OplFactory oplF = new OplFactory(); OplErrorHandler errHandler = oplF.CreateOplErrorHandler(Console.Out); OplRunConfiguration rc = null; if (parser.dataFileNames.Count == 0) { rc = oplF.CreateOplRunConfiguration(parser.modelFileName); } else { rc = oplF.CreateOplRunConfiguration(parser.modelFileName, (String[])parser.dataFileNames.ToArray(typeof(String))); } OplModel opl = rc.GetOplModel(); OplModelDefinition def = opl.ModelDefinition; OplDataSource dataSource = new SqlCustomDataSource(oplF, def, configuration); opl.AddDataSource(dataSource); opl.Generate(); if (parser.externalDataName != null) { using (TextWriter wt = File.CreateText(parser.externalDataName)) opl.PrintExternalData(wt); } bool success = opl.HasCplex ? opl.Cplex.Solve() : opl.CP.Solve(); if (success) { opl.PostProcess(); // Write results to result table Console.WriteLine("Writing results"); SqlWriter writer = new SqlWriter(configuration, opl); writer.WriteResults(); } oplF.End(); status = 0; } catch (ILOG.OPL.OplException ex) { Console.WriteLine(ex.Message); status = 2; } catch (ILOG.Concert.Exception ex) { Console.WriteLine(ex.Message); status = 3; } catch (System.Exception ex) { Console.WriteLine(ex); Console.WriteLine(ex.Message); status = 4; } Environment.ExitCode = status; Console.WriteLine("--Press <Enter> to exit--"); Console.ReadLine(); }