簡體   English   中英

System.Data.SqlClient.SqlException: '操作數類型沖突:datetime2 與十進制不兼容

[英]System.Data.SqlClient.SqlException: 'Operand type clash: datetime2 is incompatible with decimal

我有一個需要結構化參數的存儲過程。 我正在嘗試從我的 C# 代碼中調用存儲過程,但出現以下錯誤。

System.Data.SqlClient.SqlException: '操作數類型沖突:datetime2 與十進制不兼容表值參數“@TableType”的數據不符合參數的表類型。 SQL Server 錯誤是: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

我通過傳遞所需的參數(數據表)來調用 SP。 但是,它在var executeNonQuery = command.ExecuteNonQuery();返回錯誤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;
            }
        }

對於“數據”變量,我已經有了一個數據集。 HourlyData類具有與表類型相同的結構。

public class HourlyData
{
        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public DateTime? RecordDate{ get; set; }

        [DataMember]
        public decimal? Amount{ get; set; }
}

根據此處的信息您需要添加一個屬性,以便ObjectReader.Create(data)產生的列順序與 TVP 中的預期相同。

如果屬性未在源類中定義,則使用字母順序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM