Question
Je le code suivant et il donne liés à des accolades et des trucs.
<#@ template language="C#" debug="True" hostspecific="True" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.xml" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data.SqlClient" #>
namespace MyProject.Entities
{
public class
{
<#
string connectionString =
"Server=localhost;Database=GridViewGuy;Trusted_Connection=true";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
System.Data.DataTable schema = conn.GetSchema("TABLES");
foreach(System.Data.DataRow row in schema.Rows)
{
#>
public class <#= row["TABLE_NAME"].ToString() #>
{
}
}
}
}
Quelqu'un peut-il repérer le problème?
La solution
La raison pour laquelle il ne compile est parce que vous ne disposez pas d'une accolade fermante correspondante pour le bloc foreach à l'intérieur des balises <# #>
. Vous devez faire le changement suivant:
foreach(System.Data.DataRow row in schema.Rows)
{
#>
public class <#= row["TABLE_NAME"].ToString()#>
{
}
<#
} //this was missing.
#>
De plus, gardez à l'esprit que votre code va créer une classe sans nom suivi d'une liste de classes imbriquées avec les noms de vos tables. Comme ceci:
public class
{
public class Table1
{
}
public class Table2
{
}
//... and so on..
}
Cela peut ne pas être ce que vous essayez d'accomplir.
Autres conseils
Dans votre premier bloc, vous démarrez un bloc de code
foreach(System.Data.DataRow row in schema.Rows)
{
#>
mais jamais y mettre fin. Quelque part ci-dessous vous en avez besoin:
<# } #>
modifier - il semble que ce serait l'accolade fermante juste au-dessous de la définition de classe imbriquée