c#:将查询作为参数传递并显示结果
本文关键字:参数传递 显示 结果 查询 | 更新日期: 2023-09-27 18:18:01
我是asp.net, c#的新手,基于流行的音乐商店应用程序构建MVC应用程序。我已经准备好了我的基本导航,我已经达到了一个点,我画一个完全空白。基本上,我的asp页面显示一个SQL查询(这是保存在同一台机器上的SQL DB)
需要:我需要有一个按钮旁边的查询,点击时,通过OLEDB连接到另一个DB,并运行查询,并在弹出窗口显示结果。
问题:我如何将查询(正在从数据库中获取)作为参数传递给下面的代码,以及如何使结果弹出在窗口中。
你能给我指个正确的方向吗?下面的代码来自一个asp页面,我用来测试连接等,基本上我需要传递查询作为一个参数(取代查询见下文),并有一个弹出窗口的结果。<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Data.Odbc" %>
<script runat="server">
sub Page_Load
Dim dbconn, sql, dbcomm, dbread
dbconn = New OleDbConnection("Provider=xxxx;Password=xxxx;User ID=xxxx;Data Source=xxxx;Initial Catalog=xxxx;Port=xxxx;")
dbconn.Open()
sql = "Select ID from TABLE1"
dbcomm = New OleDbCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader() <%-- Call this method within oledbcommand--%>
If dbread.Read = False Then
MsgBox("No Data Check")
Else
Response.Write("<table>")
Do While dbread.Read()
Response.Write("<tr>")
Response.Write("<td>")
Response.Write(dbread(0))
Response.Write("</td>")
Response.Write("</tr>")
Loop
Response.Write("</table>")
End If
dbconn.Close()
end sub
</script>
额外的细节
控制器类..
public ActionResult DisplayResult(String Qry)
{
List<QuerySet> QueryToExecute = new List<QuerySet>();
return View(QueryToExecute);
为控制器提供数据的视图,这是从我的SQL数据库中获取的查询,应该在单独的服务器上的单独的DB上执行。
<ul>
@foreach (var ShowQueries in Model.Queriess)
{
<li>
@Html.ActionLink(ShowQueries.Query, "DisplayResult", new { Qry = ShowQueries.Query })
</li>
}
问题:我应该如何使用一个名为"DisplayResult"的视图来处理上面的视图获取的查询,并对另一个DB执行它。我希望我可以使用Webform视图而不是剃刀视图,但无论哪种方式我都无法传递参数任何想法都很感谢
MVC的重点是将数据连接从视图(aspx页)移到控制器中。
阅读更多的MVC教程,并购买一两本书。你应该将数据填充到控制器上的视图模型中,然后将那个视图模型传递给视图。这样,视图就不知道如何获取数据——它已经从控制器获得了数据。
视图应该负责通过web向用户显示数据,而不是直接获取数据或操作数据。
撇开这些不谈,你可以这样做:
使用AJAX(即jQuery $. AJAX()方法)将查询作为字符串传递给控制器上的操作方法(使用HTTP POST或GET)。
让action方法返回你的弹出窗口的HTML,使用局部视图。您也可以返回Json,但我认为在这种情况下HTML/partial view会更容易。这个方法将进行OLE DB连接,并执行查询。
在$.ajax()成功函数回调中,编写一个javascript,它将弹出一个新的对话框,其中包含控制器动作方法返回的部分视图HTML。
您可以创建一个类来保存您想要显示的数据:
namespace sample {
class viewList
{
public string field1 {get;set;}
...
}
}
和创建一个列表来保存你的结果在你的控制器:
List<viewList> theList = new List<viewList>();
//Populate dbread here...
while (dbread.Read())
{
viewList listData = new viewList();
listData.field1 = (dataType)dbread[0]; //Convert to your data type
theList.Add(listData);
}
并将其传递给视图:
return view(theList);
然后在模型中(模型类型为viewList
)在表中显示结果:
@model sample.viewList
<table>
@foreach (var item in Model)
{
<tr>
<td>@item.field1</td>
</tr>
}
</table>
要在弹出窗口中显示,将列表放入ViewBag中,如下所示:
List<viewList> theList = new List<viewList>();
//Populate dbread here...
while (dbread.Read())
{
viewList listData = new viewList();
listData.field1 = (dataType)dbread[0];
theList.Add(listData);
}
ViewBag.Items = theList;
那么在你看来:
<script type="text/javascript">
$(function() {
var array = @Html.Raw(Json.Encode(ViewBag.Items));
//Construct your table using the array here...
alert(theConstructedTable);
});
</script>