我的问题是,在代码背后(使用查询)从Server获取数据,然后对代码背后的一些参数(C#)进行过滤,最好的方法是什么?
就像我必须使用动态查询从Server获取数据一样- TableName应该按输入传递
Select * From [TableName]然后我想对结果应用过滤,比如应用有效的日期过滤,isActive或者其他什么。
string SqlString = "SELECT * FROM TableName;";
SqlDataAdapter sda = new SqlDataAdapter(SqlString, Conn);
DataTable dt = new DataTable();
try
{
Conn.Open();
sda.Fill(dt);
}
catch (SqlException se)
{
DBErLog.DbServLog(se, se.ToString());
}
finally
{
Conn.Close();
}否则我会用
DataSet ds = new DatSet()
sda.Fill(ds)如果我们不知道表列(生效日期或IsActive列除外),如何迭代结果集(DataTable/DataSet)和筛选记录
然后创建对象并将对象转换为XML格式。
非常感谢你的帮助。提前谢谢。
发布于 2017-07-02 21:29:22
正如@Steve在他的评论中提到的那样,一个好的实践是尽可能多地在SQL查询中进行过滤。
使用T-sql条件(WHERE、GROUP BY、HAVING等)过滤和操作数据有多种方法。与您可以在应用程序中执行的操作相比,SQL server非常有效。
下面是关于这个主题的有趣的讨论:“永远不要在代码中做你能让SQL服务器为您做得更好的事情”--这是一个错误设计的处方吗?
另一方面,在一些特殊情况下,使用sql steatments将导致资源的损失和不必要的。例如,高频GUI更改和更新,当遇到这样的情况时,针对sql server的多个查询可能会浪费资源,在这种情况下,一种处理方法是使用林克、Lambda表达式、二进制搜索等从程序中缓存的datatable或其他对象中提取数据.
需要注意的是,作为一名程序员,您应该掌握和理解操作数据的最有效方法.。
请参阅我在您的代码中的评论/建议:
private void foo()
{
// add a much conditions as you can inside the query
// for example "SELECT * FROM TableName WHERE Col2 IS NOT NULL AND col2 LIKE '%jr%' AND col3 > 3 AND YEAR(col4) = 2017"...
string SqlString = "SELECT * FROM TableName";
SqlDataAdapter sda = new SqlDataAdapter(SqlString, Conn);
DataTable dt = new DataTable();
try
{
Conn.Open();
sda.Fill(dt);
// you can add more conditions, filterring, sorting, grouping using LINQ or Lambda Expretions
// for example create new datatable based on condition
DataTable newDt = dt.AsEnumerable().Where(x => x.Field<int>("col3") > 3).Select(y => y).CopyToDataTable();
// use WriteToXml() method and save as xml file
string FilePath = @"C:\YOUR_FILE_PATH.xml";
// give name to the datatable, WriteToXml() can not create xml with null table name
newDt.TableName = "myTableName";
// save
newDt.WriteXml(FilePath);
}
catch (SqlException se)
{
DBErLog.DbServLog(se, se.ToString());
}
finally
{
Conn.Close();
}
}https://stackoverflow.com/questions/44874599
复制相似问题