static void generateCodeSysObjectType(DbConnection conn, CodeGenArgs args, string objType) { List <string> names = new List <string>(); DbDataReader reader; DbProviderFactory factory = args.providerFactory; try { if (conn.State != ConnectionState.Open) { conn.Open(); } using (DbCommand cmd = factory.CreateCommand()) { cmd.Connection = conn; cmd.CommandText = "select name from sysobjects where type='" + objType + "' and uid=user_id('DBO') order by name"; reader = cmd.ExecuteReader(); while (reader.Read()) { names.Add(reader.GetString(0)); } reader.Close(); } foreach (string aTable in names) { generateCodeForSingleTable(conn, aTable, args); } conn.Close(); } catch (Exception ex) { Logger.log(MethodBase.GetCurrentMethod(), ex); } }
static void engageTestMode(CodeGenArgs args2, string invariantName) { DbProviderFactory factory; DataTable dt; //string invariantName; FactoryTester ft; try { if (!string.IsNullOrEmpty(invariantName)) { //testFactory(DbProviderFactories.GetFactory(invariantName)); ft = new FactoryTester(DbProviderFactories.GetFactory(invariantName)); ft.doTests(); } else { dt = DbProviderFactories.GetFactoryClasses(); for (int nrow = 0; nrow < dt.Rows.Count; nrow++) { invariantName = dt.Rows[nrow]["InvariantName"].ToString(); engageTestMode(null, invariantName); //factory = DbProviderFactories.GetFactory(invariantName); //testFactory(factory); } } } catch (ConfigurationErrorsException cee) { Logger.log(MethodBase.GetCurrentMethod(), cee); } catch (ArgumentException ae) { Logger.log(MethodBase.GetCurrentMethod(), ae); } catch (Exception ex) { Logger.log(MethodBase.GetCurrentMethod(), ex); } }
static void generateCodeFromTables(DbConnection conn, CodeGenArgs args) { string currentTable = null; if (args.tables.Count > 0) { try { if (conn.State != ConnectionState.Open) { conn.Open(); } foreach (string tableName in args.tables) { generateCodeForSingleTable(conn, currentTable = tableName, args); } conn.Close(); } catch (Exception ex) { if (!string.IsNullOrEmpty(currentTable)) { throw new ApplicationException("Error processing table: " + currentTable, ex); } Logger.log(MethodBase.GetCurrentMethod(), ex); //throw new ApplicationException("error", ex); throw; } } else { generateCodeSysObjectType(conn, args, "U"); } }
static void extractTablesAsClasses(CodeGenArgs args2) { string connStr = null, appName = Assembly.GetEntryAssembly().GetName().Name, providerClass; DbProviderFactory factory = args2.providerFactory; DbConnectionStringBuilder sb = null; bool isSqlclient = false; providerClass = factory.GetType().FullName; if (string.Compare(providerClass, "System.Data.SqlClient.SqlClientFactory", true) == 0) { sb = args2.providerFactory.CreateConnectionStringBuilder(); sb.Add("Application Name", appName); sb.Add("Data Source", args2.server); sb.Add("Initial Catalog", args2.database); if (!string.IsNullOrEmpty(args2.userName) && !string.IsNullOrEmpty(args2.password)) { //sb.use System.Data.SqlClient.SqlConnectionStringBuilder sb2; sb2 = sb as System.Data.SqlClient.SqlConnectionStringBuilder; sb2.UserID = args2.userName; sb2.Password = args2.password; } else { sb.Add("Integrated Security", true); } isSqlclient = false; } else { Debug.Print("user/pass here?"); } if (sb != null) { connStr = sb.ConnectionString; Trace.WriteLine("ConnectionString is " + connStr); try { using (DbConnection conn = factory.CreateConnection()) { conn.ConnectionString = connStr; if (isSqlclient) { ((System.Data.SqlClient.SqlConnection)conn).InfoMessage += infoMessageHandler; } ; conn.Open(); generateCodeFromTables(conn, args2); conn.Close(); } } catch (Exception ex) { Trace.WriteLine(ex.Message); //throw new ApplicationException("another", ex); throw; } finally { } } }
//static void Conn_InfoMessage(Object sender, System.Data.SqlClient.SqlInfoMessageEventArgs e) { // throw new NotImplementedException(); //} // } static void extractDataFor(CodeGenArgs args2) { try { extractTablesAsClasses(args2); } catch (Exception ex) { Logger.log(MethodBase.GetCurrentMethod(), ex); //throw new ApplicationException("here-2", ex); throw; } }
static void generateCodeForSingleTable(DbConnection conn, string aTable, CodeGenArgs args) { DbDataReader reader; using (DbCommand cmd = args.providerFactory.CreateCommand()) { cmd.Connection = conn; cmd.CommandText = "SELECT * FROM " + aTable + " WHERE 1=0"; cmd.CommandType = CommandType.Text; if (conn.State != ConnectionState.Open) { conn.Open(); } generateStuff(makeClassName(aTable), args, reader = cmd.ExecuteReader(), aTable); reader.Close(); } }
static void generateCodeFromViews(DbConnection conn, CodeGenArgs args) { generateCodeSysObjectType(conn, args, "V"); }
public static void Main(string[] args) { CodeGenArgs args2 = CodeGenArgs.parseArgs(args); TextWriterTraceListener twtl = null; string logFile, dir, appName, errMsg; int exitCode = 0; //args2.setProvider("System.Data.SqlClient"); appName = Assembly.GetEntryAssembly().GetName().Name; #if TRACE logFile = Environment.ExpandEnvironmentVariables("%TEMP%" + "\\" + appName + "\\" + appName + ".log"); if (!Directory.Exists(dir = Path.GetDirectoryName(logFile))) { Directory.CreateDirectory(dir); } twtl = new TextWriterTraceListener(logFile, TRACER_NAME); Trace.Listeners.Add(twtl); #endif Trace.WriteLine(appName + " starts"); if (!args2.testmode) { if (string.IsNullOrEmpty(args2.database)) { Console.Error.WriteLine("database not specified. Cannot continue."); args2.showHelp = true; } if (string.IsNullOrEmpty(args2.outDir)) { Console.Error.WriteLine("output-directory not specified. Cannot continue."); args2.showHelp = true; } } if (args2.showHelp) { args2.showHelpText(Console.Error); exitCode = 2; } else { try { #if true if (args2.testmode) { //var factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); engageTestMode(args2, "NSMyProvider"); //engageTestMode(args2, "System.Data.SqlClient"); } else { Trace.WriteLine("Generate files in: " + args2.outDir); if (!Directory.Exists(args2.outDir)) { Directory.CreateDirectory(args2.outDir); } extractDataFor(args2); } #else using (SqlConnection conn = new SqlConnection(connStr)) { conn.InfoMessage += Conn_InfoMessage; conn.Open(); Trace.WriteLine(appName + " starts"); extractDataFor(args2); Trace.WriteLine(appName + " ends"); } #endif } catch (Exception ex) { errMsg = Logger.extractMessage(ex) + Environment.NewLine + ex.StackTrace; //Logger.log(MethodBase.GetCurrentMethod(), ex); #if TRACE Trace.WriteLine(errMsg); #endif Console.Error.WriteLine(errMsg); exitCode = 1; } finally { } #if TRACE Trace.Flush(); if (twtl != null) { Trace.Listeners.Remove(TRACER_NAME); } #endif Environment.Exit(exitCode); } }
internal static CodeGenArgs parseArgs(string[] args) { CodeGenArgs ret = new CodeGenArgs(); string anArg; int len, nargs; nargs = args.Length; for (int i = 0; i < nargs; i++) { anArg = args[i]; if ((len = anArg.Length) >= 2) { if (anArg[0] == '-' || anArg[0] == '/') { switch (anArg[1]) { case 'B': ret.provider = new Microsoft.VisualBasic.VBCodeProvider(); break; case 'd': if (len > 2) { ret.database = anArg.Substring(2).Trim(); } else { ret.database = args[i + 1]; i++; } break; case 'f': ret.generateFields = true; break; case 'n': if (len > 2) { ret.nameSpace = anArg.Substring(2).Trim(); } else { ret.nameSpace = args[i + 1]; i++; } break; case 'o': if (len > 2) { ret.outDir = Path.GetFullPath(anArg.Substring(2).Trim()); } else { ret.outDir = Path.GetFullPath(args[i + 1]); i++; } break; case 'P': if (len > 2) { ret.password = anArg.Substring(2).Trim(); } else { ret.password = args[i + 1].Trim(); i++; } break; case 'S': if (len > 2) { ret.server = anArg.Substring(2).Trim(); } else { ret.server = args[i + 1]; i++; } break; case 'U': if (len > 2) { ret.userName = anArg.Substring(2).Trim(); } else { ret.userName = args[i + 1].Trim(); i++; } break; case 't': if (len > 2) { ret.tables.Add(anArg.Substring(2).Trim()); } else { ret.tables.Add(args[i + 1].Trim()); i++; } break; case 'T': ret.testmode = true; break; case 'h': ret.showHelp = true; break; case '?': ret.showHelp = true; break; default: Console.Error.WriteLine("Unhandled arg: " + anArg); ret.showHelp = true; break; } } else { ret.argsToProcess.Add(anArg); } } } return(ret); }