/// <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()); }
//[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); }
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; }
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); }
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); }
/// <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); }