C# 将文本值替换为基于列的动态数据

C# 将文本值替换为基于列的动态数据,c#,sql-server,C#,Sql Server,我想使用基于列名从数据库检索的数据集替换文本的值,例如: SQL: 我有一段文字: Hello my name is <<Fullname>> and my age is <<Age>> Hello my name is <<Lastname>> and I am <<Feeling>> SQL: 我有一段文字: Hello my name is <<Fullname>>

我想使用基于列名从数据库检索的数据集替换文本的值,例如:

SQL:

我有一段文字:

Hello my name is <<Fullname>> and my age is <<Age>>
Hello my name is <<Lastname>> and I am <<Feeling>>
SQL:

我有一段文字:

Hello my name is <<Fullname>> and my age is <<Age>>
Hello my name is <<Lastname>> and I am <<Feeling>>

我最近使用的一个优秀的开源解决方案是

请参考这里,我详细说明了我开始做了什么,并查看Tim的精彩答案

您可以执行查询、构造POCO并使用它填充模板。您可以从任何地方读取模板文本—文件、数据库列、web服务等

作为你将如何进行的粗略想法:

public class PersonTemplateInfo : Drop
{
    public string Name { get; set; }
    public string Feeling { get; set; }
}
然后按如下方式使用:

// Code to read templateText here

Template.NamingConvention = new CSharpNamingConvention();
Template template = Template.Parse(templateText);

// Code to read values

PersonTemplateInfo personTemplateInfo = new PersonTemplateInfo
{
    Name = name,
    Feeling = feeling
};

string parsedText = template.Render(Hash.FromAnonymousObject(new {personTemplateInfo = personTemplateInfo }));

据我所知,下面的代码看起来像你需要的。我只是直接在这里输入,所以,如果你觉得有用的话,你只要得到这个想法并改正它

   SqlCeDataAdapter da = new SqlCeDataAdapter();
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();

        da.SelectCommand = new SqlCommand(@"SELECT Fullname, Age,Lastname, Feeling,OtherProperties FROM User", connString);
        da.Fill(ds, "User");
        dt = ds.Tables["User"];

        var resultText = "Hello, ";
        var textDic = new Dictionary<string,string>(){
           {"Fullname","And My name is {0}"},
           {"Age","And My age is {0}"},
           {"LastName","And my name is {0}"},
           {"Felling","And I am  {0}"}, 
           {"OtherProperties","And whatever  {0}"}, 
         };

         foreach (DataRow row in dt.Rows)
        {
            foreach (DataColumn column in dt.Columns)
            {
                ColumnName = column.ColumnName;
                ColumnData = row[column].ToString();
                if(textDic.ContainsKey(ColumnName))
                {
                    resultText+= string.Format(textDic[ColumnName],ColumnData)
                }
            }
        }

// your final result is this resultText

查询数据,然后在字符串上使用替换函数。列名不同,请在数据库中检索数据的地方发布真实代码,只要不显示当前代码。此问题与C或任何其他编程相关问题无关。具体来说,你遇到了什么困难?目前很难理解你到底在问什么。为了获得有关StackOverflow的帮助,请始终回答以下问题:您的输入是什么?你想要的产量是多少?你得到了什么?这只是一个评论而不是一个答案,不是吗?如果你不能定义要替换什么呢。您只需将模板中的列名替换为列值。确切地说,您必须从已知点开始,因此请读入模板并对符号进行更改,然后替换。这对你有用吗?如果你不能定义要替换什么呢。只需将模板中的列名替换为列值。
// Code to read templateText here

Template.NamingConvention = new CSharpNamingConvention();
Template template = Template.Parse(templateText);

// Code to read values

PersonTemplateInfo personTemplateInfo = new PersonTemplateInfo
{
    Name = name,
    Feeling = feeling
};

string parsedText = template.Render(Hash.FromAnonymousObject(new {personTemplateInfo = personTemplateInfo }));
   SqlCeDataAdapter da = new SqlCeDataAdapter();
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();

        da.SelectCommand = new SqlCommand(@"SELECT Fullname, Age,Lastname, Feeling,OtherProperties FROM User", connString);
        da.Fill(ds, "User");
        dt = ds.Tables["User"];

        var resultText = "Hello, ";
        var textDic = new Dictionary<string,string>(){
           {"Fullname","And My name is {0}"},
           {"Age","And My age is {0}"},
           {"LastName","And my name is {0}"},
           {"Felling","And I am  {0}"}, 
           {"OtherProperties","And whatever  {0}"}, 
         };

         foreach (DataRow row in dt.Rows)
        {
            foreach (DataColumn column in dt.Columns)
            {
                ColumnName = column.ColumnName;
                ColumnData = row[column].ToString();
                if(textDic.ContainsKey(ColumnName))
                {
                    resultText+= string.Format(textDic[ColumnName],ColumnData)
                }
            }
        }

// your final result is this resultText