Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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");
            }
        }
Пример #4
0
        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 {
                }
            }
        }
Пример #5
0
        //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;
            }
        }
Пример #6
0
        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();
            }
        }
Пример #7
0
 static void generateCodeFromViews(DbConnection conn, CodeGenArgs args)
 {
     generateCodeSysObjectType(conn, args, "V");
 }
Пример #8
0
        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);
            }
        }
Пример #9
0
        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);
        }