C# 将文本值替换为基于列的动态数据
我想使用基于列名从数据库检索的数据集替换文本的值,例如: SQL: 我有一段文字: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>>
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