У меня есть хранимая процедура, для которой требуется структурированный параметр. Я пытаюсь вызвать хранимую процедуру из моего C# кода и получаю следующую ошибку.
System.Data.SqlClient.SqlException: 'Тип операнда cla sh: datetime2 несовместим с десятичные данные для табличного параметра "@TableType" не соответствуют табличному типу параметра. SQL Ошибка сервера: 200, состояние: 7 '
Ниже представлена моя хранимая процедура, доступная в базе данных.
CREATE PROCEDURE dbo.spProcessData
@TableType AS dbo.TblTypeHourlyData READONLY
AS
BEGIN
SET NOCOUNT ON;
END
Это мой скрипт типа таблицы.
CREATE TYPE dbo.TblTypeHourlyData AS TABLE
(
Name NVARCHAR(50),
RecordDate DATETIME,
Amount DECIMAL(18,2)
)
GO
Я вызываю ИП, передавая необходимый параметр (таблица данных). Однако в строке var executeNonQuery = command.ExecuteNonQuery();
возвращается ошибка.
List<HourlyData> data = .................
using (var connection = CreateConnection())
{
using (var command = connection.CreateCommand())
{
command.CommandText = "dbo.spProcessData";
command.CommandType = CommandType.StoredProcedure;
DataTable paramDT = new DataTable();
using (var reader = ObjectReader.Create(data))
{
paramDT.Load(reader);
}
var param1 = new SqlParameter("@TableType", SqlDbType.Structured)
{
TypeName = "dbo.TblTypeHourlyData",
Value = paramDT
};
command.Parameters.Add(param1);
connection.Open();
var executeNonQuery = command.ExecuteNonQuery(); // ERROR
connection.Close();
var value = executeNonQuery > 0;
return value;
}
}
Для переменной «data» у меня уже есть набор данных. HourlyData
класс имеет ту же структуру, что и тип таблицы.
public class HourlyData
{
[DataMember]
public string Name { get; set; }
[DataMember]
public DateTime? RecordDate{ get; set; }
[DataMember]
public decimal? Amount{ get; set; }
}