Этот запрос отлично работает в Sql Server Management Studio, но когда я пытаюсь запустить его в наборе данных & pass Date (@ Param2 & @ Pram3) из сборщика данных, его выброс исключений. Ошибка конверсии. Я не знаю, что в этом плохого, мои другие вопросы работают нормально. Это происходит из-за UNION ALL?Ошибка конверсии при преобразовании даты и/или времени из символьной строки
.NET Код
startDatePicker.Format = DateTimePickerFormat.Short;
endDatePicker.Format = DateTimePickerFormat.Short;
DataTable ntwTable = ntw.GetData(owner,start,end);
start = startDatePicker.Value.ToShortDateString();
end = endDatePicker.Value.ToShortDateString();
SQL
SELECT o.Name, SUM(sq.SQuantity * sq.SRate) AS TotalSale, SUM(sq.PrQuantity * sq.PrRate) AS TotalPurchase, (SUM(sq.PQuantity) - SUM(sq.SQuantity))
* (SUM(sq.PQuantity * sq.PRate)/SUM(sq.PQuantity)) AS Inventory
FROM (SELECT OwnerId, CompanyId, Quantity AS PQuantity, RatePerShare AS PRate, 0 AS SQuantity, 0 AS SRate, 0 AS PrQuantity, 0 AS PrRate, Date
FROM Purchase
UNION ALL
SELECT OwnerId, CompanyId, 0 AS PQuantity, 0 AS PRate, 0 AS SQuantity, 0 AS SRate, Quantity AS PrQuantity, RatePerShare AS PrRate, Date
FROM Purchase AS pr
UNION ALL
SELECT OwnerId, CompanyId, Quantity AS PQuantity, 0 AS PRate, 0 AS SQuantity, 0 AS SRate, 0 AS PrQuantity, 0 AS PrRate, Date
FROM Bonus
UNION ALL
SELECT OwnerId, CompanyId, Quantity AS PQuantity, CostOfShare AS PRate, 0 AS SQuantity, 0 AS SRate, 0 AS PrQuantity, 0 AS PrRate, Date
FROM RightShare
UNION ALL
SELECT OwnerId, CompanyId, 0 AS PQuantity, 0 AS PRate, Quantity AS SQuantity, RatePerShare AS SRate, 0 AS PrQuantity, 0 AS PrRate, Date
FROM Sales) AS sq INNER JOIN
Owner AS o ON o.OwnerId = sq.OwnerId
WHERE (o.OwnerId = @Param1) AND (sq.Date BETWEEN @Param2 AND @Param3)
GROUP BY sq.CompanyId, o.Name
Что представляют собой типы данных '@ Param2' и' @ Param3'? Как вы вызываете запрос в своем коде? – LittleBobbyTables
Вы не указали код вызова. Но это почти наверняка, потому что (в какой-то момент) вы вызываете ненужное преобразование значения 'datetime' в строку. И тогда что-то не так с переводом обратно в значение 'datetime' –
Можем ли мы увидеть код, в котором вы его передаете .... если он работает в SSMS, а не в C#, то это, вероятно, проблема с его передачей. – logixologist