问题描述
ALTER PROCEDURE [dbo].[Datade]
@makineadı varchar,@startdate datetime
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM HMI.[dbo].Tarihmakine
WHERE MakineAdı = @makineadı
AND Tarih = @startdate
END
我在这个 API 控制器中使用了这个存储过程,通常当我尝试获取 sql 数据的所需日期时,我可以提取它,但是当我尝试对机器名称进行字符串格式时,我认为无法获取此数据这是由双引号引起的,但我无法将其转换为单引号 ''
public class RaporController : ApiController
{
public IHttpActionResult Getemprecords(string makineadı,DateTime? startdate)
{
HMIEntities1 sd = new HMIEntities1();
var results = sd.Data(makineadı,startdate).ToList();
return Ok(results);
}
}
我使用此网页获取特定值 https://localhost:44355/api/rapor?makinineadı=192.168.0.8&&startdate=2021-01-29
这是我的数据库 enter image description here
解决方法
您的代码看起来像 SQL Server。如果是这样,永远不要使用没有长度的字符串声明:
ALTER PROCEDURE [dbo].[Datade] (
@makineadı varchar(255),@startdate datetime
) AS
BEGIN
SET NOCOUNT ON;
select *
from HMI.[dbo].Tarihmakine
where MakineAdı = @makineadı and Tarih = @startdate
END;
默认日期也因上下文而异——这些错误可能很难调试。在您的情况下,默认值为 varchar(1)
,这不是您想要的。
另一个潜在问题是使用 datetime
作为第二个参数。但是,您想要的尚不清楚:
- 如果你。
Tarih
是date
,然后将参数作为date
传入。 - 如果
Tarih
是datetime
并且您希望这些值位于相同的日期,则传入date
并使用convert(date,Tarih) = @startdate
。 - 仅在
Tarih
是datetime
(某种类型的)并且您希望将比较时间缩短到几分之一秒时按原样使用代码。