C# 如何使用select查询从存储在应用程序中的数据表中读取数据?
我正在为我的网站开发一个搜索模块。为了使其工作更快,我想将我的C# 如何使用select查询从存储在应用程序中的数据表中读取数据?,c#,asp.net,datatable,C#,Asp.net,Datatable,我正在为我的网站开发一个搜索模块。为了使其工作更快,我想将我的产品表存储在应用程序中。像这样: DataLayer dl = new DataLayer(); string CS = dl.dataLayerConnectionString; System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(CS); string F
产品
表存储在应用程序
中。像这样:
DataLayer dl = new DataLayer();
string CS = dl.dataLayerConnectionString;
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(CS);
string FetchSqlSyntax = "SELECT AllImages.ImgSrc, Product.FName, Product.EName, Product.PID FROM AllImages INNER JOIN Product ON AllImages.PID = Product.PID";
System.Data.SqlClient.SqlCommand FetchCmd = new System.Data.SqlClient.SqlCommand(FetchSqlSyntax , con);
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(FetchCmd);
System.Data.DataTable dt = new System.Data.DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
Application["Product"] = dt;
}
if(Application["Product"] != null)
{
DataTable table = (DataTable)Application["Product"];
}
else
{
//fetch from DataBase
}
现在,我想从我的产品表中选择一些与搜索到的关键字相关的数据,这些数据存储在Application
中,并显示在我的ProductGridView
中
毕竟,这是提高性能的正确方法吗
谢谢你,对不起我的英语不好;)
之后,您可以对表执行任何操作。我建议您使用会话
,而不是应用程序
Session["ProductTable"] = dt;
应用程序状态是可供所有用户使用的数据存储库
ASP.NET应用程序中的类。应用程序状态存储在
服务器上的内存,并且比存储和检索更快
数据库中的信息。与会话状态不同,会话状态特定于
在单用户会话中,应用程序状态应用于所有用户和
会议。因此,应用程序状态是一个有用的存储位置
少量经常使用的数据,用户之间不会发生变化
另一个
你可以读这个。读最后一句话,选择要使用的内容。在我的实践中,我总是使用会话
编辑:
关于您在评论中提出的问题:
首先,搜索功能不应采用TOP10
。在打开页面或其他位置时,您应该缓存所有元素。您将在数据表
中缓存此查询。如果只在前10名中搜索,结果几乎每次都是错误的
SELECT
AllImages.ImgSrc, Product.FName, Product.EName, Product.PID
FROM
AllImages
INNER JOIN
Product ON AllImages.PID = Product.PID
有人使用搜索功能后,您将进行如下检查:
DataLayer dl = new DataLayer();
string CS = dl.dataLayerConnectionString;
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(CS);
string FetchSqlSyntax = "SELECT AllImages.ImgSrc, Product.FName, Product.EName, Product.PID FROM AllImages INNER JOIN Product ON AllImages.PID = Product.PID";
System.Data.SqlClient.SqlCommand FetchCmd = new System.Data.SqlClient.SqlCommand(FetchSqlSyntax , con);
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(FetchCmd);
System.Data.DataTable dt = new System.Data.DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
Application["Product"] = dt;
}
if(Application["Product"] != null)
{
DataTable table = (DataTable)Application["Product"];
}
else
{
//fetch from DataBase
}
之后,您可以使用LINQ通过搜索词或DataTable仅选择特定数据。选择method
dt.Select("ename Like '%" + SearchTextBox.Text + "%'");
之后,您将数据表作为DataSource
或其他使用它的控件提供给网格
注意:
在内存中缓存查询是正确的数据性能交易如果您在性能方面遇到困难,并且这是您最后的希望,请使用此选项
我给你举个例子:
如果用户进入产品页面,我们将100个产品缓存在内存中,我们将只从会话/应用程序中获取100个项目,但如果其他用户来创建5个新产品,它们将不会保存在内存中。您需要为它们执行新的抓取并保存在内存中。解决方案是在特定时间段清除内存缓存,例如10分钟此外,缓存数据必须在某一点上清除,因为您可以填满服务器的内存强>
这将保证新数据将被放入内存中,但在这10分钟内您将遇到同样的问题正因为如此,我告诉过您,这种类型的缓存是在正确的数据->性能之间进行权衡。我认为从数据库中取出所有数据,然后在内存中进行搜索对性能没有好处,如果您在数据库中进行搜索并将数据带回,我认为您的性能会好得多。数据库针对这类事情进行了优化,在内存中执行此操作需要不必要地从数据库中读取数据。我很确定这不是真的。你可以读我在回答中提到的那篇文章。这是it应用程序状态的一部分,它存储在服务器的内存中,比在数据库中存储和检索信息要快。谢谢。但正如“mybirhname”所注意到的,应用程序状态存储在服务器的内存中,比在数据库中存储和检索信息要快。你是否考虑另一种更好的性能方法?如果内存中有所有数据,而不必查询数据库,那就更快了。但并非总是如此possible@NedStoyanov这是我在回答中写的交易。您应该在特定的时间段保存/清除内存中的数据!非常感谢。您说得对,但问题是如何从数据表中获取特定数据?“从AllImages.PID=Product.PID中的AllImages内部联接产品中选择TOP(10)AllImages.ImgSrc、Product.FName、Product.EName、Product.EName、Product.PID,其中(FName类似于N“%”+SearchTextBox.Text+“%”或EName类似于N“%”+SearchTextBox.Text+“%”和(AllImages.imgorder=1)'如何从datatable中选择此查询?@MahdiHesari检查我的编辑。我会补充一些你应该注意的事情。@MahdiHesari你可以做任何你想做的事情。这是您的选择,这是特定于解决方案的。我无法给出正确答案:)@MahdiHesari当您使用Select时,您应该将其存储在新的DataTable对象中:DataTable=dst.Tables[0]。Select(“IsActive=1”).CopyToDataTable();这是我的代码示例,因为注释中的代码不可读。您可以查看我的完整答案。