ASP.NET MVC/EFでSQL Serverストアドプロシージャを実行する方法について誰かが私をガイドできますか
アプリケーションと結果を取り戻す?
SQL Serverストアドプロシージャ
CREATE PROCEDURE dbo.StoredProcedure2 AS
declare @parameter2 int
SET @parameter2 = 4
RETURN @parameter2
MVCコード
private readonly TestDatastoreContext _context = new TestDatastoreContext();
public ViewResult Index(string id)
{
ViewData["EnvironmentId"] = id;
using (_context)
{
_context.Database.Connection.Open();
var command = _context.Database.Connection.CreateCommand();
command.CommandText = "dbo.StoredProcedure2";
command.CommandType = System.Data.CommandType.StoredProcedure;
var test = (command.ExecuteScalar());
}
var bigView = new BigViewModel
{
VersionsModel = _context.Versions.ToList(),
EnvironmentViewModel = _context.Environments.ToList(),
};
return View(model: bigView);
}
あなたの問題はこれです:(RETURN @paramter2
を使用して)ストアドプロシージャから値を返していますが、.NETコードが結果セットを読み取ろうとしています。ストアドプロシージャ内でSELECT .....
ステートメントを使用して「返される」もの
ストアドプロシージャを次のように変更します。
CREATE PROCEDURE dbo.StoredProcedure2 AS
declare @parameter2 int
SET @parameter2 = 4
SELECT @parameter2
その後、.NETコードは問題なく機能します。
RETURN
ステートメントはステータスコードにのみ使用する必要があり、INT
値のみを返すことができます。これを使用する場合は、Direction.ReturnValue
を使用して、ストアドプロシージャのSqlParameter
を定義する必要があります。
Stored Procedure
をコンテキストにマップする方法については、この公式ドキュメントを確認してください:
マッピング後、次のようにStored Procedure
を呼び出すことができます。
var val = _context.StoredProcedure2();
1つのオプションは、単純にこれを行うことです。
MyReturnEntity ret = context.Database
.SqlQuery<MyReturnEntity>("exec myStoredProc ?, ?", param1, parm2);
このライブラリを使用できます: https://github.com/mrmmins/C-StoreProcedureModelBinding
値をリストとして返します。次のような名前と値のタイプを持つ単純なクラスを作成するだけです。
_var productos = DataReaderT.ReadStoredProceadures<MyCustomModel>(myDbEntityInstance, "dbo.MySPName", _generic);
_
myCumtomModelクラスは次のようなものです。
_public int id {get; set;}
public int salary {get; set;}
public string name {get; set;}
public string school {get; set;}
_
そして一般的なような:
_List<Generic> _generic = = new List<Generic>
{
new Generic
{
Key = "@phase", Type = SqlDbType.Int, Value = "207"
}
}
};
_
そして今、あなたのproducts
はproducts.First()
、products.Count()
、foreach
などのオプションを持っています。