誰かが私を助けてくれるのではないかと思いますが、C#とSQL Serverを使用してストアドプロシージャにデータテーブルを渡そうとしています。私は取得していますエラーメッセージがクラスからデータテーブルを作成してストアドプロシージャに渡すSQL ServerとC#
オペランドタイプ衝突である:nvarchar型はCustomerTermsTableTypeと互換性がありません以下
私はSQL Server内で作成されたタイプがある
データベースの種類
CREATE TYPE dbo.CustomerTermsTableType AS TABLE
(
DueDays int,
DiscountPercent DECIMAL (5, 2),
DiscountDays int,
CreditLimit DECIMAL (19, 4),
ChargeInterest bit,
IsStandardTerms bit,
UseDiscounts bit,
CompanyID int,
PaymentTimeFrame varchar(50) ,
TrackingState int
);
GO
次に、ストアドプロシージャを作成しました。
CREATE PROCEDURE [dbo].[sp_InsertTerms]
@CustomerTermsTableType CustomerTermsTableType ReadONLY
AS
BEGIN
INSERT INTO dbo.Terms (ChargeInterest, CompanyID, DiscountDays, DueDays, DiscountPercent, IsStandardTerms, PaymentTimeFrame, TrackingState, UseDiscounts, CreditLimit)
SELECT
ChargeInterest, CompanyID, DiscountDays, DueDays, DiscountPercent,
IsStandardTerms, PaymentTimeFrame, TrackingState, UseDiscounts, CreditLimit
FROM
@CustomerTermsTableType;
END
作成し、C#を使用してストアドプロシージャを実行
public static DataTable CreateDataTable<T>(IEnumerable<T> list)
{
Type type = typeof(T);
var properties = type.GetProperties();
DataTable dataTable = new DataTable();
foreach (PropertyInfo info in properties)
{
dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType));
}
foreach (T entity in list)
{
object[] values = new object[properties.Length];
for (int i = 0; i < properties.Length; i++)
{
values[i] = properties[i].GetValue(entity);
}
dataTable.Rows.Add(values);
}
return dataTable;
}
データテーブルを埋めます。
List<SqlParameter> TermParms = new List<SqlParameter>();
SqlParameter parameter = new SqlParameter();
parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "dbo.CustomerTermsTableType";
parameter.Value = CreateDataTable<termview>(newList);
TermParms.Add(parameter);
DbRawSqlQuery<dynamic> TermsID = _context.Database.SqlQuery<dynamic>("sp_InsertTerms CustomerTermsTableType ", TermParms.ToArray());
エラー
オペランドタイプ衝突:nvarchar型は、私が間違っていたものを考え出し最後にCustomerTermsTableType