none
vb.netでMVCを作る際 Ilistの使用方法 C#サンプルあり RRS feed

  • 質問

  • お疲れ様です

    MVCでDBにアクセルするプログラムを自動的なコード作成等を

    使わずに昔ながらの方法で作ろうと思い

    C#のサンプルを探しました

    VB.NETだとIlistとlist()の部分がうまくいきません

    ネットを見ても良くわからないのでよろしくお願いします

    12: public class EmployeesData
    13: {
    14: public ILis tGetEmployees()
    15: {
    16: System.Text.StringBuilder sql = new System.Text.StringBuilder();
    17: sql.Append("SELECT ");
    18: sql.Append(" EMPLOYEES.EMPLOYEE_ID, ");
    19: sql.Append(" EMPLOYEES.FIRST_NAME, ");
    20: sql.Append(" EMPLOYEES.LAST_NAME, ");
    21: sql.Append(" DEPARTMENTS.DEPARTMENT_NAME ");
    22: sql.Append("FROM ");
    23: sql.Append(" HR.EMPLOYEES ");
    24: sql.Append("INNER JOIN ");
    25: sql.Append(" HR.DEPARTMENTS ");
    26: sql.Append("ON ");
    27: sql.Append(" EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID ");
    28: sql.Append("ORDER BY ");
    29: sql.Append(" EMPLOYEE_ID ");
    30:
    31: IList employeesList = new List();
    32:
    33: using (OracleDataReader rdr =
    OracleHelper.ExecuteReader(OracleHelper.ConnectionStringLocalTransaction,
    CommandType.Text,
    sql.ToString(),
    null))
    34: {
    35: while (rdr.Read())
    36: {
    37: MvcApp.Models.EmployeeInfo employee =
    new MvcApp.Models.EmployeeInfo(rdr.GetInt32(0),
    rdr.GetString(1),
    rdr.GetString(2),
    rdr.GetString(3));
    38: employeesList.Add(employee);
    39: }
    40: }
    41:
    42: return employeesList;
    43: }
    44: }

    問題は31行の所で

    vb.netならdim employeeList as Ilist = new list()

    と書くのかなと思いますが受け付けてくれません


    • 編集済み yasukunv 2017年9月5日 8:21 一部文字がおかしい
    2017年9月5日 8:20

回答

  • IListに保存する型の指定が必要です。例えば、
    Dim employeeList As IList = New List(Of Employee)()


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2017年9月5日 8:27
    モデレータ
  • サンプルが見当たらないんでなんとなくですが、IListも IList<Employee> / IList(Of Employee) じゃないかな。
    • 回答としてマーク yasukunv 2017年9月5日 10:37
    2017年9月5日 8:41

すべての返信

  • IListに保存する型の指定が必要です。例えば、
    Dim employeeList As IList = New List(Of Employee)()


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2017年9月5日 8:27
    モデレータ
  • サンプルが見当たらないんでなんとなくですが、IListも IList<Employee> / IList(Of Employee) じゃないかな。
    • 回答としてマーク yasukunv 2017年9月5日 10:37
    2017年9月5日 8:41
  • C# ですが、以下の記事のコードが参考になりませんか?

    w2ui Grid
    http://surferonwww.info/BlogEngine/post/2015/12/26/w2ui-grid-in-aspnet-web-forms-application.aspx

    2 つサンプルコードがある内の最初の方のコードを見てください。

    Record クラスの定義と、while ループを回して 1 レコード取得するごとに Record クラスを初期化して取得したデータを Record クラスのプロパティを使って代入し、最初の方で data.records = new List<Record>(); で初期化した List<Record> 型オブジェクトに Add しているところに注目してください。

    List<Record> 型オブジェクトが完成したら、それを Model として View に渡してやれば目的は果たせるはずです。

    不明点があったら質問してください。

    2017年9月5日 8:54
  • 【追伸】

    Oracle でどこまで機能が充実しているのか分かりませんが・・・

    SQL Server の場合と同等な機能があれば、既存のデータベースから Entity Data Model (EDM) を作り、スキャフォールディング機能を使って Create, Read, Update, Delete (CRUD) 操作を行うための ASP.NET MVC アプリを一切自力でコードを書かないで作ることが可能です。

    スキャフォールディング機能
    http://surferonwww.info/BlogEngine/post/2017/07/23/creating-controller-and-view-in-mvc-using-scaffolding-function.aspx

    今回自力でコードを書いているのが勉強のためということでなければ、そちらの方向を検討された方が良いと思います。

    2017年9月5日 9:02
  • ありがとうございます

    まさしくその通りでした

    自分で作ったプログラムを載せますとまずmodelのところに

    Public Class info
        Public Property HINMEI_CD As String
        Public Property HINMEI As String
    End Class

    Imports Oracle.DataAccess.Client
    Public Class MhinmeiData
        Public Function GetHinmei() As IList
            Dim sSql As String
            Dim Da As OracleDataAdapter
            Dim dtTable As DataTable
            Dim dtSet As New DataSet
            Dim dtRow As DataRow
            Dim cn As OracleConnection
            cn = New OracleConnection("User ID=****;Password=****;data source=202.23.251.6:1521/****")
            sSql = "select hinmei_cd,hinmei from mhinmei order by hinmei_cd"
            Da = New OracleDataAdapter(sSql, cn)
            Da.Fill(dtSet, "Table")
            dtTable = dtSet.Tables("Table")
            Dim hinmeilist As New List(Of info)
            For i = 0 To dtTable.Rows.Count - 1
                dtRow = dtTable.Rows(i)
                Dim hinmei As info = New info
                hinmei.HINMEI_CD = dtRow(0)
                hinmei.HINMEI = dtRow(1)
                hinmeilist.Add(hinmei)

            Next
            Return hinmeilist
        End Function
    End Class

    と二つのクラスを作り

    コントローラーの所に以下のようなクラスを作り

    Namespace Web_Apli_MVC3_2
        Public Class HinmeiController
            Inherits System.Web.Mvc.Controller

            '
            ' GET: /Hinmei

            Function Index() As ActionResult
                Dim hinmeiList As IList
              
                Dim MhinmeiDAta As New MhinmeiData
                hinmeiList = MhinmeiDAta.GetHinmei
                Return View(hinmeiList)
            End Function

        End Class
    End Namespace

    ビューの所に

    Hinmeiのフォルダーを作り

    厳密な型を指定しinfoのクラスを指定し

    リストを指定すると見事に表示されました

    <%@ Page Language="VB" Inherits="System.Web.Mvc.ViewPage(Of IEnumerable (Of Web_Apli_MVC3_2.info))" %>

    <!DOCTYPE html>

    <html>
    <head runat="server">
        <title>Index</title>
    </head>
    <body>
        <p>
            <%: Html.ActionLink("Create New", "Create") %>
        </p>
        <table>
            <tr>
                <th></th>
                <th>
                    HINMEI_CD
                </th>
                <th>
                    HINMEI
                </th>
            </tr>
       
        <% For Each item In Model %>
            <tr>
                <td>
                    <%--<%: Html.ActionLink("Edit", "Edit", New With {.id = item.PrimaryKey}) %> |
                    <%: Html.ActionLink("Details", "Details", New With {.id = item.PrimaryKey}) %> |
                    <%: Html.ActionLink("Delete", "Delete", New With {.id = item.PrimaryKey}) %>--%>
                </td>
                <td>
                    <%: item.HINMEI_CD %>
                </td>
                <td>
                    <%: item.HINMEI %>
                </td>
            </tr>
        <% Next %>
       
        </table>
    </body>
    </html>

    今までずっと悩んでいましたが結局 誤植が原因だったようです

    2017年9月5日 10:37