8

標準のSQLselectステートメントをSqlDataAdapterを介してSQLボックスに送信し、DataSetオブジェクトにデータを入力しています。

結果のDataSetの行にアクセスできますが、DataSetをMVCビューに返すことができるリストに変換するにはどうすればよいですか。つまり、Listオブジェクトがこれを処理するための最良の方法であると想定しています。

これが私のコントローラーのc#コードです:

public class QAController : Controller
{

    private readonly static string connString = ConfigurationManager.ConnectionStrings["RegrDBConnection"].ToString();
    private readonly static SqlConnection sqlConn = new SqlConnection(connString);
    private readonly static SqlCommand sqlComm = new SqlCommand();

    public ActionResult Index()
    {
        DbRegressionExec();
        return View();
    }
    public static void DbRegressionExec()
    {
        // SELECT TABLE CONTENTS FROM SQL !!
        RegressDB_TableList regresDB = new RegressDB_TableList();
        string sqlStr = "select * from [RegressionResults].[dbo].[Diff_MasterList] order by TableName";

        // POPULATE DATASET OBJECT
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(sqlStr, sqlConn);
        da.SelectCommand.CommandType = CommandType.Text;
        sqlConn.Open();
        try
        {
            da.Fill(ds, "RegresDB");
        }
        catch (Exception e)
        {
            throw;
        }
        finally
        {
            sqlConn.Close();
        }

       // I can iterate thru rows here, but HOW DO CONVERT TO A LIST OBJECT ????

        int numRows = ds.Tables["RegresDB"].Rows.Count;
        for (int i = 0; i < numRows; i++)
        {
            string tblName = ds.Tables["RegresDB"].Rows[i].Field<string>("TableName");
        }

        //List<RegressDB_TableList> masterList = regresDB.RegresTableList.ToList(); //not working !!
        //var masterList = regresDB.TableName.ToList(); //

    }

}

そして、これを実現するために必要な簡単なクラス:

namespace RegressionMvc.Models
{
  public class RegresDB_TableName
  {
     public string TableName { get; set; }
  }
  public class RegressDB_TableList
  {
     public List<RegresDB_TableName> RegresTableList { get; set; }
  }

}

最後に、SQL ServerからのDataSetの結果を処理するための最良の方法と、それらをMVCビューに戻す方法を見つけようとしています。

私はおそらくjQueryとJsonを使用できます。つまり、データフィールドをJsonに変換してJQueryに戻るだけですが、SQLベースの結果セットを処理する方法はいくつかあると確信しています。

よろしくお願いします。

最高、ボブ

4

4 に答える 4

5

コントローラーに次のようなコードを入れます

[HttpGet]
public ActionResult View(Modelclass viewmodel)
{
    List<Modelclass> employees = new List<Modelclass>();
    DataSet ds = viewmodel.GetAllAuthors();
    var empList = ds.Tables[0].AsEnumerable().Select(dataRow => new Modelclass{
       AuthorId = dataRow.Field<int>("AuthorId"),
        Fname = dataRow.Field<string>("FName"),
       Lname = dataRow.Field<string>("Lname")
    });
    var list = empList.ToList();



    return View(list);
}

そして視野に

@{
var gd = new WebGrid(Model, canPage: true, rowsPerPage: 5, selectionFieldName: "selectedRow",ajaxUpdateContainerId: "gridContent");
    gd.Pager(WebGridPagerModes.NextPrevious);}
@gd.GetHtml(tableStyle: "table",

        columns: gd.Columns(
                 gd.Column("AuthorId", "AuthorId"),
                 gd.Column("Fname", " Fname"),
                 gd.Column("Lname", "Lname", style: "description")

 )) 
于 2014-04-09T09:37:57.530 に答える
1

コントローラーコード

 //pQ is your query you have created 
 //P4DAL is the key name for connection string 

  DataSet ds = pQ.Execute(System.Configuration.ConfigurationManager.ConnectionStrings["Platform4"].ConnectionString);


  //ds will be used below
  //create your own view model according to what you want in your view 
 //VMData is my view model

 var _buildList = new List<VMData>();
            {
                foreach (DataRow _row in ds.Tables[0].Rows)
                {
                    _buildList.Add(new VMData
                    {  
     //chose what you want from the dataset results and assign it your view model fields 

                        clientID = Convert.ToInt16(_row[1]),
                        ClientName = _row[3].ToString(),
                        clientPhone = _row[4].ToString(),
                        bcName = _row[8].ToString(),
                        cityName = _row[5].ToString(),
                        provName = _row[6].ToString(),
                    });



                }

            }

  //you will use this in your view
  ViewData["MyData"] = _buildList;

意見

@if (ViewData["MyData"] != null)
{

    var data = (List<VMData>)ViewData["MyData"];
    <div class="table-responsive">
        <table class="display table"  id="Results">

            <thead>
                <tr>
                    <td>Name</td>
                    <td>Telephone</td>
                    <td>Category </td>
                    <td>City </td>
                    <td>Province </td>

                </tr>
            </thead>

            <tbody>
                @foreach (var item in data)
                {
            <tr>
                <td>@Html.ActionLink(item.ClientName, "_Display", new { id = item.clientID }, new { target = "_blank" })</td>
                <td>@item.clientPhone</td>
                <td>@item.bcName</td>
                <td>@item.cityName</td>
                <td>@item.provName</td>

            </tr>

            }
            </tbody>


        </table>
        </div>
        }
于 2016-08-11T10:09:36.100 に答える