質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

1回答

771閲覧

MVC データベース接続クラスの作成

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2022/10/13 06:26

編集2022/10/14 12:21

前提

データベースに接続し、一覧画面、編集画面、新規作成画面の作成を行いました。

実現したいこと

データベース専用クラスの作成
Controllerへの値の受け渡し

発生している問題・エラーメッセージ

DataBase1.cs (データベース専用クラスです)

public class DataBase1 { public void DataBase() { string ConnectionStr = ConfigurationManager.ConnectionStrings["iPentecDBConnectionString"].ConnectionString; SqlConnection connection; connection = new SqlConnection(ConnectionStr) return ; } }

該当のソースコード

Controller

C#

1 public ViewResult Index(animal model ) 2 { 3 DataBase1 data = new DataBase1(); 4 5 string ConnectionStr 6 = ConfigurationManager.ConnectionStrings["iPentecDBConnectionString"].ConnectionString; 7 8 SqlConnection connection; 9 connection = new SqlConnection(ConnectionStr); 10 11 connection.Open(); 12 13 SqlCommand command = connection.CreateCommand(); 14 command.CommandType = CommandType.Text; 15 16 command.CommandText = "SELECT ・・・"; 17 18     //DataTableに設定 19     //modelListの作成 20 return View(model); 21 } 22 23 [HttpGet] 24 public ActionResult Create() 25 { 26 return View(); 27 } 28 [HttpPost] 29 public ActionResult Create(String id2) 30 { 31 //データベース接続 32    //SELECT文 33 return View(model); 34 } 35

試したこと

たくさん調べながらやってみましたが、インスタンス化するまでしか分かりませんでした。
https://anderson02.com/cs/cskiso/post-375/
こちらのサイトを参考にしていました。

補足情報(FW/ツールのバージョンなど)

ASP.NET MVC 
Windows 10 Pro,
Visual Studio2022 Version 17.3.2
.NET framework 4.7.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/10/13 06:49 編集

> データベースに接続し、一覧画面、編集画面、新規作成画面の作成を行いました。 「行いました」と過去形になってますが、それはどうやって作ったのですか? 期待通りに動いているのですか? Visual Studio 2022 で SQL Server(ですよね?)のテーブルの CRUD 操作を行うアプリを作る場合、普通、Visual Studio のスキャフォールディング機能で Entity Framework 6 を使った Controller と View を自動生成します。 コードを見るとそうはなってないようですが、スキャフォールディング機能のことを何も知らずにやってませんか? それとも何か特別な理由があって違うことをしているのですか? というより、コードを書こうとしたが、何もわからなくて何もできないので途中で諦めて丸投げしてませんか?
退会済みユーザー

退会済みユーザー

2022/10/13 06:56

一通り画面は完成しています。そのうえでデータベース接続だけクラスを作成し、controllerの中身を分かりやすくしたいなと思い、質問しました。 スキャフォールディング機能のことは知っていますが、使用せずに進めています。
退会済みユーザー

退会済みユーザー

2022/10/13 07:11

> 一通り画面は完成しています。そのうえでデータベース接続だけクラスを作成し、controllerの中身を分かりやすくしたいなと思い、質問しました。 ならば、現状の完成していて動くコードを提示し、それをどうしたいのか具体的に説明するようにしてください。 今の質問のコードは、何かしようとしたが分からなくなって途中で諦めて丸投げしたようにしか見えず、議論できるレベルにありません。 > スキャフォールディング機能のことは知っていますが、使用せずに進めています。 理由は何ですか? EF6 を使わないのは何故ですか? 特に理由がなければ自己流はやめましょう。
退会済みユーザー

退会済みユーザー

2022/10/13 07:28

同一人物ではないのですが、出されている課題が似たような感じなので同じスクールのかたですねおそらく 開発環境は学校のですので同じになるのは必然かと。 そもそも一人で複数のアカウントをもてるものなのですか?
退会済みユーザー

退会済みユーザー

2022/10/13 07:40 編集

それは信じられませんね。 ASP.NET MVC  Windows 10 Pro, Visual Studio2022 Version 17.3.2 .NET framework 4.7.2 の書き方が、3 つのスレッドで一字一句違わないのも同じ学校で習ったから? そんなことあり得ないでしょう。 前にも言ったけど、学校の課題は学校の先生に聞いてください。 https://teratail.com/help/avoid-asking に「何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません」と書いてあるように非推奨です。
退会済みユーザー

退会済みユーザー

2022/10/13 07:44

わたしも質問する前にこの方たちが同じ学校だとおもったので、環境も同じことだし、コピペさせていただいただけです。 課題を質問するのはダメなのですね。かしこまりました。
m.ts10806

2022/10/13 11:39 編集

せめて質問削除依頼してから退会してほしい。 オープンのままずっと残り続ける。
退会済みユーザー

退会済みユーザー

2022/10/13 23:19

C# の文法の基本のキも分かってないようだが、ホントに学校に行ってるのかしら? だとすると、学校がダメなのか、教えてるのに勉強しない生徒がダメなのかどっちなんだろう。何にせよ酷すぎ。
退会済みユーザー

退会済みユーザー

2022/10/13 23:31 編集

> せめて質問削除依頼してから退会してほしい。オープンのままずっと残り続ける。 いきなり全部消して去っていくより良いと思います。上のやり取りにだって意味ある情報が含まれているので (スキャフォールディング機能とか)。
m.ts10806

2022/10/13 23:35

仰ることは最も思います。ただ、あくまで「コメント」として目に入りにくいところとなりますし、 「誰かが回答しても未来永劫解決にならない」という点が気になっていますので。 (質問者の行為が無責任であることの指摘です)
退会済みユーザー

退会済みユーザー

2022/10/14 02:26

スキャフォールディング機能を利用して作成した Controller のコードを回答欄に書いておきます。多少はこのスレッドが意味のあるものになるのではないかと思いますので。
guest

回答1

0

上の質問への 2022/10/14 11:26 の私のコメントで、

スキャフォールディング機能を利用して作成した Controller のコードを回答欄に書いておきます。多少はこのスレッドが意味のあるものになるのではないかと思いますので。

・・・と書いた件です。

例として、Visual Studio の ADO.NET Entity Data Model メニューで Microsoft のサンプルデータベース Northwind から Entity Data Model を作成し、スキャフォールディング機能を利用して Products テーブルの CRUD を行う Controller と View のコードを一式自動生成します。詳しい手順は以下の記事を見てください。

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

自動生成された Controller の Index と Create アクションメソッドのコードは以下の通りとなります。(Edit, Details, Delete アクションメソッドも生成されますが省略。Create アクションメソッド内で ViewBag を使って View に SelectList を渡しているのは、上に紹介した記事の一番上の画像のように DropDownList を使うという事情があるからで、これも自動生成されたものです)

C#

1using System; 2using System.Data; 3using System.Data.Entity; 4using System.Linq; 5using System.Threading.Tasks; 6using System.Net; 7using System.Web.Mvc; 8 9namespace Mvc5App2.Controllers 10{ 11 public class ProductsController : Controller 12 { 13 private NORTHWINDEntities db = new NORTHWINDEntities(); 14 15 // GET: Products 16 public async Task<ActionResult> Index() 17 { 18 var products = db.Products.Include(p => p.Categories).Include(p => p.Suppliers); 19 return View(await products.ToListAsync()); 20 } 21 22 // GET: Products/Details/5 23 // ・・・省略・・・ 24 25 // GET: Products/Create 26 public ActionResult Create() 27 { 28 ViewBag.CategoryID = new SelectList(db.Categories, "CategoryID", "CategoryName"); 29 ViewBag.SupplierID = new SelectList(db.Suppliers, "SupplierID", "CompanyName"); 30 return View(); 31 } 32 33 // POST: Products/Create 34 [HttpPost] 35 [ValidateAntiForgeryToken] 36 public async Task<ActionResult> Create( 37 [Bind(Include = "ProductID,ProductName,SupplierID,CategoryID,QuantityPerUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLevel,Discontinued")] 38 Products products) 39 { 40 if (ModelState.IsValid) 41 { 42 db.Products.Add(products); 43 await db.SaveChangesAsync(); 44 return RedirectToAction("Index"); 45 } 46 47 ViewBag.CategoryID = new SelectList(db.Categories, "CategoryID", "CategoryName", products.CategoryID); 48 ViewBag.SupplierID = new SelectList(db.Suppliers, "SupplierID", "CompanyName", products.SupplierID); 49 return View(products); 50 } 51 52 // GET: Products/Edit/5 53 // ・・・省略・・・ 54 55 // POST: Products/Edit/5 56 // ・・・省略・・・ 57 58 // GET: Products/Delete/5 59 // ・・・省略・・・ 60 61 // POST: Products/Delete/5 62 // ・・・省略・・・ 63 64 protected override void Dispose(bool disposing) 65 { 66 if (disposing) 67 { 68 db.Dispose(); 69 } 70 base.Dispose(disposing); 71 } 72 } 73}

質問者さんは、どういう理由か知りませんが、スキャフォールディング機能は使わず EF6 も使わず、Index アクションメソッドで ADO.NET + SqlClient で SELECT クエリを SQL Server に投げて DataTable を作成し、それを List<T> 型に加工して View に渡すという長~いコードを書いていますが、上の EF6 を使ったコードではそれが 2 行で済んでいます。

学校の課題だそうですので、好意的に考えると ADO.NET + SqlClient でコードを書く勉強をやらされてるのかもしれないとは思いましたが、それにしても不必要に無駄が多い自己流のコードは考え直すべきだと思います。学校で教えたのでしょうか?

投稿2022/10/14 03:11

編集2022/10/14 03:21
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問