エンタープライズライブラリ(バージョン= 6.0.0.0)を使用してVS2015 MVCプロジェクトで作業しています。私はSQLストアドプロシージャにパラメータとしてクラス型の配列を送信する必要があります。Microsoft.Practices.EnterpriseLibraryを使用してクラス型配列をSQLサーバーデータベースに渡す方法
public static Database CoreDB
{
get
{
return _coreDatabase;
}
}
public BaseRepository()
{
DatabaseProviderFactory factory = new DatabaseProviderFactory();
Database coreDB = factory.Create("DB_Name");
_coreDatabase = coreDB;
}
ビューモデルでは、データベースに挿入するIDのコレクションを含むクラスabcの配列を作成しました。
public class viewModelClass
{
public abc[] Details { get; set; }
public int param1 { get; set; }
public int param2 { get; set; }
public int param3 { get; set; }
}
public class abc
{
public int ID { get; set; }
public string Name { get; set; }
public Boolean IsActive { get; set; }
}
POST後、ストアドプロシージャにモデルから値を渡すAM(私はこの配列パラメータを処理するためのSQLサーバでのユーザ定義テーブル型を作成しています)。
public int CreateAdminUser(viewModelClass userInfo)
{
string insertUserSP = Resources.InsertUser;
DbCommand cmd = CoreDB.GetStoredProcCommand(insertUserSP);
CoreDB.AddInParameter(cmd, "@param1", DbType.Int32, userInfo.param1);
CoreDB.AddInParameter(cmd, "@param2", DbType.Int32, userInfo.param2);
CoreDB.AddInParameter(cmd, "@param3", DbType.Int32, userInfo.param3);
SqlParameter temp = new SqlParameter("@details", userInfo.Details);
temp.SqlDbType = SqlDbType.Structured;
temp.TypeName = "dbo.UserDefinedTypeName";
cmd.Parameters.Add(temp);
int result = Convert.ToInt32(CoreDB.ExecuteNonQuery(cmd));
return result;
}
「[] IEnumerable'1にABCからパラメータ値を変換できませんでした」とは、ExecuteNonQuery()の実行中に「オブジェクトがIConvertibleを実装する必要があります」と内部例外として例外を取得します。
私の問題は、このUserInfo.Details配列をパラメータとしてSQL Serverに渡すことです。
これは、あなたがテーブル型のパラメータにクラスオブジェクトの配列を渡すことはできません、私のテーブル型...
CREATE TYPE [dbo].[UserDefinedTypeName] AS TABLE(
[Id] [int] NOT NULL,
[Name] [varchar](200) NULL,
[IsActive] [bit] NULL)
あなたは 'userInfo.param1'-' userInfo.param3'のタイプを見逃しました。また、 'userInfo.abc'は存在しません(あなたが詳細を意味すると思います)。そのストアドプロシージャの署名は何ですか? –
実際には、public class viewModelClass { 公開abc []詳細{get;セット; } パブリックint param1 {get;セット; } 公開ストリングparam2 {get;セット; } public int param3 {get;セット; } }とSqlParameterのtemp =新しいSqlParameter( "@詳細"、userInfo.Details);私の問題は、このUserInfo.Details配列をSQLサーバーへのパラメータとして渡すことです –
これは私のテーブルタイプです... CREATE TYPE [dbo]。[UserDefinedTypeName] AS TABLE( \t [Id] [int] NOT NULL、 \t [名前] [varchar](200)NULL、 \t [IsActive] [bit] NULL ) –