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视图而不是剃刀视图,但无论哪种方式我都无法传递参数任何想法都很感谢

c#:将查询作为参数传递并显示结果

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>