以下のc#コードは自明です。DataTableをテーブル値パラメーターとしてWebMatrix.Data.Database.Queryを介してSQLServer2008のストアドプロシージャに渡したいのですが、以下のc#コード(つまりappDatabase.Query)の最後の行で例外がスローされます
「テーブルタイプパラメータ「0」には有効なタイプ名が必要です。」
public JsonResult GetUserListForRoles(int[] RoleIds)
{
using (Database appDatabase = Database.Open("DefaultConnection"))
{
DataTable roleIdsTable = new DataTable();
roleIdsTable.Columns.Add("RoleId", typeof(int));
foreach(int role in RoleIds)
{
roleIdsTable.Rows.Add(role);
}
List<UserNameIdModel> userNameIdModelList = new List<UserNameIdModel>();
var userNameIdList = appDatabase.Query("EXEC dbo.sp_GetUserListForRoles @roleIdsList=@0", roleIdsTable);
データベースで、TSQLのこのビットを使用してユーザー定義のテーブルタイプを作成しました
CREATE TYPE dbo.RoleIdsList AS TABLE (RoleId int)
正常に実行され、SQL ServerManagementStudioの[タイプ/ユーザー定義テーブルタイプ]の下に表示されます
これはストアドプロシージャです(@roleIdsListパラメーターに正しいタイプを割り当て、テーブル値パラメーターに必要なREADONLYとしてマークしたことを示すために、関連する部分のみを追加します)
ALTER PROCEDURE [dbo].[sp_GetUserListForRoles]
-- Add the parameters for the stored procedure here
@roleIdsList dbo.RoleIdsList READONLY
かなりの検索を行いましたが、WebMatrix.Data.Databaseを処理するソリューションを見つけることができませんでした...私が見つけたすべてのソリューションには、SqlCommandとSqlParameterが含まれていました。アプリ全体でWebMatrix.Data.Databaseを使用しており、一貫性を保つ必要があります。
注意:私はWebMatrixIDEを使用していません。私は、MVC4アプリでのDBインタラクションのために、コントローラーでこの名前空間を使用しています。
これに関する専門知識を持っている誰かからのいくつかのガイダンスを熱心に待っています。よろしくお願いします。