ASP.NET MVC はストアド プロシージャを使用してデータ操作をバッチで追加および変更します
この記事では、ストアド プロシージャを使用して ASP.NET MVC でデータを一括追加および変更する方法を主に紹介します。非常に優れており、必要な友人は参照できます。
データベースのやり取りには Entity Framework を使用し、lamda を直接使用します。コード内では、式と linq がデータベース上で動作するため、プログラマーはデータベース アクセスのコーディング時間を節約し、ビジネス ロジック層の作成に直接集中できます。ただし、より複雑なテーブルの関係をクエリしたり変更したりするのは、より手間がかかります。使用できる通常の方法は、EF を使用して SQL ステートメントまたは "ストアド プロシージャ" を実行することです。もちろん、MVC の下部で ADO.NET を使用することもできますが、ここでは説明しません。ここに。バッチの作り方は?ここでは、ストアド プロシージャを使用して、EF でデータをバッチで追加および変更する方法について説明します。
要件は次のとおりです。商品カテゴリの配送タスクの量は、月に 1 回更新され、月の初めに 0 にリセットされます。フォーム、つまり追加と変更はすべて 1 ページにあります。
アイデア: フロントエンドはまずフォームを使用してカテゴリーを動的に読み取り、当月のタスクの数が追加されている場合は、viewbag を使用してカテゴリーを動的にページにロードします。それ以外の場合は、当月のタスクの数が新たに追加されます。フォームを送信するときに、カテゴリ番号をバックエンドに送信する方法を考えました。つまり、バックエンドがデータを取得するかどうかを判断する方法を考えました。 Type はカテゴリ番号を含み、split('|')[1] を使用してループ内で読み取ります。
それをデータベースに渡すにはどうすればよいですか?データをデータテーブルに保存し、EF を使用してストアド プロシージャを実行し、データテーブルを処理用のパラメータとしてデータベースに渡します。
データベースはこのデータテーブルをどのように処理しますか?カスタム データ型での処理
コード ステップ:
コード アスペクト
コントローラーは動的フォームを表示します
public ActionResult MarketTaskAdd() { var markeType = new MarketDataProvider().GetBTIDData().Where(a=>a.ID!="0");//读取类别 var rel = new MarketTaskProgressProvider().GetMarketMonthTask(); if (rel.Count() > 0) { ViewBag.datas = rel.Join(markeType, a => a.MKBTID, b => int.Parse(b.ID), (a, b) => new { a.MKBTID, b.ID,b.Text,a.TaskNum }).Select(s=>new ViewsModel { ID= s.MKBTID.ToString() ,Text=s.Text,TaskNum=s.TaskNum.ToString()}); }//如果有数据关联数据 else { var rel2 = markeType.Select(s => new ViewsModel{ ID = s.ID, Text = s.Text, TaskNum="" }).ToList();//直接返回表单 ViewBag.datas = rel2; } return View(); }
最初はオブジェクトを直接返したかったのですが、フォアグラウンド トラバーサルはサポートしていなかったので、新しいエンティティ Class ViewsModel を作成しました。
ページを表示
@foreach (var modelMarkets in ViewBag.datas) { <p class="row" style="margin-top:10px"> <p class="col-md-4 text-right"><span class="red">*</span> @modelMarkets.Text </p> <p class="col-md-8 text-left"> <input name="text|@modelMarkets.ID" class="form-control" style="width:50%" value="@modelMarkets.TaskNum" type="text" /> <input type="hidden" name="type|@modelMarkets.ID" value="type|@modelMarkets.ID" /><!--隐藏表单--> </p> </p> }
コントローラー投稿フォーム
[HttpPost] public ActionResult MarketTaskAdd(string type) { var strform = Request.Form; int userId = adminUser!=null?adminUser.UserID:0;//创建人或者修改人ID DataTable dt = new DataTable(); dt.Columns.Add("MKBTID",Type.GetType("System.Int32")); dt.Columns.Add("TaskNum", Type.GetType("System.Int32")); List<string> temp1 = new List<string>(); List<string> temp2 = new List<string>(); for (int i = 0; i < strform.Count; i++) { if (strform[i].Contains("type")) { temp1.Add(strform[i].Split('|')[1]); } else { temp2.Add(strform[i]); }//循环分解表单 } for (int i = 0; i < temp1.Count; i++) { DataRow dr = dt.NewRow(); dr[0] = temp1[i]; dr[1] = temp2[i]; dt.Rows.Add(dr);//批量添加到datatable } var rel = new MarketTaskProgressProvider().MarketTaskAddOrEdit(userId,dt);//调用方法 if(rel) ViewBag.js = "<script>alert('操作成功!');window.location.href='/MarketTaskProgress/MarketTaskAdd';</script>"; else ViewBag.js = "<script>alert('操作失败!');window.location.href='/MarketTaskProgress/MarketTaskAdd';</script>"; List<ViewsModel> listTemp = new List<ViewsModel>(); listTemp.Add(new ViewsModel { ID = "", Text = "", TaskNum = "" }); ViewBag.datas = listTemp; return View(); } }
データベースに送信メソッド:
public bool MarketTaskAddOrEdit(int userId,DataTable dt) { using (DssEntity entity = new DssEntity())//不推荐用using { SqlParameter p = new SqlParameter("@CreatedUser",DbType.Int32); p.Value = userId; SqlParameter p1 = new SqlParameter("@tableMarketTask",DbType.Object); p1.Value = dt; p1.TypeName = "tableMarketTask";//参数处理,貌似自定义函数必须加这个函数名称 var rel = entity.Database.ExecuteSqlCommand("EXEC[dbo].[PR_MarketTaskAddorEdit] @CreatedUser,@tableMarketTask", p,p1);//ef执行存储过程 return rel > 0; } }
データベースアスペクト
まず独自のものを構築します。次のように入力します
-- Create the data type CREATE TYPE [dbo].[tableMarketTask] AS TABLE( [MKBTID] [varchar](50) NOT NULL,--投放类别 [TaskNum] [varchar](50) NOT NULL--投放任务数量 )
SQLサーバーツールを使用して新しいものを手動で作成することもできます
2番目はストアドプロシージャを作成することです
CREATE PROCEDURE PR_MarketTaskAddorEdit @CreatedUser INT, @tableMarketTask tableMarketTask readonly --自定义类型的参数,必须加readonly。 AS DECLARE @TempCreatedUser INT IF EXISTS(SELECT TOP 1 * FROM MarketMonthTask T WHERE Months=MONTH(GETDATE()))--当月存在的话就修改 BEGIN SELECT TOP 1 @TempCreatedUser=CreatedUser FROM MarketMonthTask T WHERE Months=MONTH(GETDATE()) DELETE FROM MarketMonthTask WHERE Months=MONTH(GETDATE()) INSERT INTO MarketMonthTask(MKBTID,TaskNum,Months,UpdateUser,CreatedUser) SELECT MKBTID,TaskNum,MONTH(GETDATE()),@CreatedUser,@TempCreatedUser FROM @tableMarketTask END ELSE--或者直接插入 BEGIN INSERT INTO MarketMonthTask(MKBTID,TaskNum,Months,CreatedUser) SELECT MKBTID,TaskNum,MONTH(GETDATE()),@CreatedUser FROM @tableMarketTask END
カスタムタイプは次のとおりですテーブルのように自分でクエリできるのでとても便利です。カスタム関数のデバッグは簡単ではありません。 EF は、ストアド プロシージャを直接呼び出す場合、カスタム関数をサポートしません。
上記は、エディターが紹介したストアド プロシージャを使用した ASP.NET MVC のデータの一括追加および変更操作です。ご質問があれば、メッセージを残してください。編集者が返信します。間に合ったあなた。また、PHP 中国語 Web サイトをサポートしていただきありがとうございます。
ストアド プロシージャを使用してデータをバッチで追加および変更する ASP.NET MVC に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、CのNull Poernter recerferenceの課題を調査します。問題は、問題はnullではなく、その誤用であると主張しています。 記事では、参照前のチェック、ポインターInitialiなど、非参照を防止するためのベストプラクティスの詳細

この記事では、printf内の\ nエスケープシーケンスを使用してcで新しいライン文字を作成し、関数を置く方法について説明します。 機能を詳しく説明し、出力のラインブレークに使用することを示すコード例を提供します。

この記事は、Cコンパイラの選択に関する初心者を案内しています。 GCCは、使いやすさ、幅広い可用性、広範なリソースが初心者に最適であるため、最適であると主張しています。 ただし、GCC、Clang、MSVC、およびTCCも比較して、その違いを強調しています

この記事では、現代のCプログラミングにおけるNullの継続的な重要性を強調しています。 進歩にもかかわらず、Nullは明示的なポインター管理にとって重要なままであり、有効なメモリアドレスがないことをマークすることにより、セグメンテーションの障害を防ぎます。 最高のPRAC

この記事では、初心者向けのオンラインCコンパイラをレビューし、使いやすさとデバッグ機能に焦点を当てています。 OnlineGDBとRepl.itは、ユーザーフレンドリーなインターフェイスと役立つデバッグツールのために強調表示されます。 プログラムやコンパイルなどのその他のオプション

この記事では、オンラインCプログラミングプラットフォームを比較し、デバッグツール、IDE機能、標準コンプライアンス、メモリ/実行の制限などの機能の違いを強調しています。 「最良の」プラットフォームはユーザーのニーズに依存していると主張しています。

この記事では、C IDEでの効率的なコードコピーについて説明します。 コピーはコンパイラ機能ではなくIDE機能であり、IDE選択ツールの使用、コード折りたたみ、検索/交換、テンプラなど、効率を向上させるための詳細戦略であることを強調しています。

この記事では、Cプログラムのコンパイルでの出力Windowsの欠落をトラブルシューティングします。 実行可能ファイルの実行に失敗し、プログラムエラー、誤ったコンパイラ設定、バックグラウンドプロセス、迅速なプログラム終了などの原因を調べます。ソリューションにはchが含まれます
