示例#1
0
        /// <summary>
        /// 生成代码
        /// </summary>
        /// <returns></returns>
        public string Render()
        {
            _databaseReader = new DatabaseReader(_connectionString.ConnectionString, !string.IsNullOrEmpty(_connectionString.ProviderName) ? _connectionString.ProviderName : _providerName);
            _databaseTable  = _databaseReader.Table(TableName);
            _databaseReader.DataTypes();
            var stringBuilder = new StringBuilder();

            stringBuilder.AppendLine(_indent + "using System;");
            stringBuilder.AppendLine(_indent + "using DataBase.Data;");
            stringBuilder.AppendLine(_indent + "namespace " + NamespaceStr);
            stringBuilder.AppendLine(_indent + "{");
            if (_databaseTable != null)
            {
                PushIndent("    ");
                stringBuilder.AppendLine(string.Concat(new object[] { _indent, "///<summary>" }));
                stringBuilder.AppendLine(string.Concat(_indent, "///", !string.IsNullOrEmpty(_databaseTable.Description) ? _databaseTable.Description : _databaseTable.Name));
                stringBuilder.AppendLine(string.Concat(new object[] { _indent, "///</summary>" }));
                stringBuilder.AppendLine(string.Format("{0}[Table(\"{1}\")]", _indent, _databaseTable.Name));
                stringBuilder.AppendLine(string.Concat(new[] { _indent, "public class ", string.Format("{0}:{1}", GetTableName(_databaseTable.Name) + EntitySuffix, GetBaseEntity(_databaseTable)) }));
                stringBuilder.AppendLine(_indent + "{");
                PushIndent("    ");
                BuildDefaultValue(stringBuilder, _databaseTable);
                stringBuilder.Append("\n");
                BuildProperty(stringBuilder, _databaseTable);
                PopIndent();
                stringBuilder.AppendLine(_indent + "}");
                PopIndent();
            }
            stringBuilder.AppendLine(_indent + "}");
            return(stringBuilder.ToString());
        }
示例#2
0
        //[TestMethod]
        public void TestGeneratedSqlForInsert()
        {
            //arrange
            ProviderChecker.Check(ProviderName, ConnectionString);
            var dbReader = new DatabaseReader(ConnectionString, ProviderName, 0);

            dbReader.DataTypes();                          //ensure we have datatypes (this doesn't hit the database)
            var table = dbReader.Table("TABWITHIDENTITY"); //this hits database for columns and constraints

            var writer = new SqlWriter(table, SqlType.Db2);

            var sql = writer.InsertSqlWithoutOutputParameter();

            Console.WriteLine(sql);
            int identity;

            //run generated sql
            using (var con = _factory.CreateConnection())
            {
                con.ConnectionString = ConnectionString;
                con.Open();
                using (var transaction = con.BeginTransaction())
                {
                    using (var cmd = con.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.Transaction = transaction;
                        foreach (var column in table.Columns)
                        {
                            if (column.IsAutoNumber)
                            {
                                continue;
                            }
                            var par = cmd.CreateParameter();
                            par.ParameterName = writer.ParameterName(column.Name);

                            object value = DummyDataCreator.CreateData(column);
                            par.Value = value ?? DBNull.Value;
                            cmd.Parameters.Add(par);
                        }
                        identity = Convert.ToInt32(cmd.ExecuteScalar());
                    }

                    //explicit rollback. If we errored, implicit rollback.
                    transaction.Rollback();
                }
            }

            //assert
            Assert.AreNotEqual(0, identity);
        }
示例#3
0
        private DatabaseTable LoadCategoriesFromNorthwind()
        {
            if (_categoriesTable != null)
            {
                return(_categoriesTable);
            }

            ProviderChecker.Check(ProviderName, ConnectionString);

            var dbReader = new DatabaseReader(ConnectionString, ProviderName);

            dbReader.DataTypes();                            //ensure we have datatypes (this doesn't hit the database)
            _categoriesTable = dbReader.Table("Categories"); //this hits database for columns and constraints
            return(_categoriesTable);
        }
        private DatabaseTable LoadCategoriesFromNorthwind()
        {
            if (_categoriesTable != null) return _categoriesTable;

            if (!File.Exists(ConnectionStrings.SqlServerCeFilePath))
            {
                Assert.Inconclusive("Cannot test SqlServerCe.4.0 as no database file " + ConnectionStrings.SqlServerCeFilePath);
            }
            _connectionString = string.Format(CultureInfo.InvariantCulture, "DataSource=\"{0}\";", ConnectionStrings.SqlServerCeFilePath);
            ProviderChecker.Check(ProviderName, _connectionString);

            var dbReader = new DatabaseReader(_connectionString, ProviderName);
            dbReader.DataTypes(); //ensure we have datatypes (this doesn't hit the database)
            _categoriesTable = dbReader.Table("Categories"); //this hits database for columns and constraints
            return _categoriesTable;
        }
示例#5
0
        private DatabaseTable LoadRegionsFromHr()
        {
            if (_regionsTable != null)
            {
                return(_regionsTable);
            }

            ProviderChecker.Check(ProviderName, ConnectionString);

            var dbReader = new DatabaseReader(ConnectionString, ProviderName, 0);

            dbReader.Owner = "HR";
            dbReader.DataTypes();                      //ensure we have datatypes (this doesn't hit the database)
            _regionsTable = dbReader.Table("REGIONS"); //this hits database for columns and constraints
            return(_regionsTable);
        }
        private DatabaseTable LoadTable()
        {
            if (_table != null)
            {
                return(_table);
            }

            ProviderChecker.Check(ProviderName, _connectionString);

            var dbReader = new DatabaseReader(_connectionString, ProviderName, 0);

            dbReader.Owner = "public";          //otherwise you have "postgres" owned tables and views
            dbReader.DataTypes();               //ensure we have datatypes (this doesn't hit the database)
            _table = dbReader.Table("country"); //this hits database for columns and constraints
            return(_table);
        }
示例#7
0
        private DatabaseTable LoadCategoriesFromNorthwind()
        {
            if (_categoriesTable != null)
            {
                return(_categoriesTable);
            }

            if (!File.Exists(DatabaseFile))
            {
                Assert.Inconclusive("SQLite database file not found: " + DatabaseFile);
            }

            ProviderChecker.Check(ProviderName, ConnectionString);

            var dbReader = new DatabaseReader(ConnectionString, ProviderName);

            dbReader.DataTypes();                            //ensure we have datatypes (this doesn't hit the database)
            _categoriesTable = dbReader.Table("Categories"); //this hits database for columns and constraints
            if (_categoriesTable == null)
            {
                Assert.Inconclusive("Could not load Categories table from SQLite file");
            }
            return(_categoriesTable);
        }
示例#8
0
        /// <summary>根据DataGridViewRow 生成DatabaseColumn
        /// 根据DataGridViewRow 生成DatabaseColumn
        /// </summary>
        /// <param name="dr"></param>
        /// <param name="databaseTable"></param>
        /// <returns></returns>
        public DatabaseColumn GenDatabaseColumn(DataGridViewRow dr, DatabaseTable databaseTable)
        {
            DatabaseColumn databaseColumn = new DatabaseColumn();

            databaseColumn.Table = databaseTable;
            //数据类型
            string strColumnLength = dr.Cells[colColumnLength.Name].Value == null ? string.Empty : dr.Cells[colColumnLength.Name].Value.ToString();
            string strColumnType   = dr.Cells[colColumnType.Name].Value == null ? string.Empty : dr.Cells[colColumnType.Name].Value.ToString();
            string strDataType     = string.IsNullOrEmpty(strColumnLength) ? strColumnType : strColumnType.Split('(')[0] + "(" + strColumnLength + ")";
            string strColumnName   = dr.Cells[colColumnName.Name].Value == null ? string.Empty : dr.Cells[colColumnName.Name].Value.ToString();
            string strColumnScale  = dr.Cells[colColumnScale.Name].Value == null ? string.Empty : dr.Cells[colColumnScale.Name].Value.ToString();
            bool   blnPK           = true;
            string strColumnPK     = dr.Cells[colColumnPK.Name].Value == null ? string.Empty : dr.Cells[colColumnPK.Name].Value.ToString();

            if (strColumnPK == string.Empty || strColumnPK.ToUpper() == "FALSE")
            {
                blnPK = false;
            }
            bool   blnIdentity       = true;
            string strColumnIdentity = dr.Cells[colColumnIdentity.Name].Value == null ? string.Empty : dr.Cells[colColumnIdentity.Name].Value.ToString();

            if (strColumnIdentity == string.Empty || strColumnIdentity.ToUpper() == "FALSE")
            {
                blnIdentity = false;
            }
            bool   blnAllow           = true;
            string strColumnAllowNull = dr.Cells[colColumnAllowNull.Name].Value == null ? string.Empty : dr.Cells[colColumnAllowNull.Name].Value.ToString();

            if (strColumnAllowNull == string.Empty || strColumnAllowNull.ToUpper() == "FALSE")
            {
                blnAllow = false;
            }
            string strColumnRemark       = dr.Cells[colColumnRemark.Name].Value == null ? string.Empty : dr.Cells[colColumnRemark.Name].Value.ToString();
            string strColumnDefaultValue = dr.Cells[colColumnDefaultValue.Name].Value == null ? string.Empty : dr.Cells[colColumnDefaultValue.Name].Value.ToString();

            databaseColumn.Name       = strColumnName;
            databaseColumn.DbDataType = strDataType.Split('(')[0].ToUpper();
            DatabaseReader reader = new DatabaseReader(databaseTable.DatabaseSchema);

            databaseColumn.DataType = reader.DataTypes().Where(t => t.TypeName.ToLower() == databaseColumn.DbDataType.ToLower()).FirstOrDefault();
            if (!string.IsNullOrEmpty(strColumnLength))
            {
                databaseColumn.Length = int.Parse(strColumnLength);
            }
            else
            {
                if (strColumnType.Contains('('))
                {
                    if (strColumnType.ToUpper().Contains("MAX"))
                    {
                        databaseColumn.Length = -1;
                    }
                    else
                    {
                        databaseColumn.Length = int.Parse(strColumnType.Replace(")", "").Split('(')[1].Split(',')[0]);
                    }
                }
            }

            if (blnPK)
            {
                databaseColumn.AddPrimaryKey();
            }
            if (blnIdentity)
            {
                databaseColumn.AddIdentity();
            }
            if (blnAllow)
            {
                databaseColumn.AddNullable();
            }
            if (strColumnRemark != string.Empty)
            {
                databaseColumn.Description = strColumnRemark;
            }
            if (strColumnDefaultValue != string.Empty)
            {
                databaseColumn.DefaultValue = strColumnDefaultValue;
            }
            if (strColumnScale != string.Empty)
            {
                databaseColumn.Scale = int.Parse(strColumnScale);
            }
            return(databaseColumn);
        }