C# 如何根据机器名筛选获取SQL数据值?
当我试图获取机器地址的特定数据值时,我无法获取此地址的值C# 如何根据机器名筛选获取SQL数据值?,c#,sql,asp.net-mvc,C#,Sql,Asp.net Mvc,当我试图获取机器地址的特定数据值时,我无法获取此地址的值 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
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数据的期望日期时,我可以提取它,但当我试图获取机器名的字符串格式时,我无法获取该数据,我认为这是双引号造成的,但我无法将其转换为单引号
我使用此网页获取特定值https://localhost:44355/api/rapor?makineadı=192.168.0.8&&startdate=2021-01-29
这是我的数据库您的代码看起来像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;
默认日期也因上下文而异——这些bug可能很难调试。在您的情况下,默认值是varchar(1)
,这不是您想要的
另一个潜在问题是第二个参数使用了datetime
。但是,您想要什么并不清楚:
- 如果你愿意的话
是一个Tarih
,然后将参数作为日期
传入日期
- 如果
是一个Tarih
并且您希望值在同一日期,则传入datetime
并使用date
convert(date,Tarih)=@startdate
- 只有当
是Tarih
(某种类型)并且您希望将比较时间缩短到几分之一秒时,才可以按原样使用代码datetime
sd.Data
做什么?这是执行存储过程并处理结果的方法。如果编写正确,即如果它使用参数化查询,则根本不需要转换或引用。我认为这只是字符串(varchar)格式问题造成的,因为在尝试根据日期时间值获取数据时不会出现错误。Data是我在下面的第一个查询中添加到的存储过程的数据表示名称。我添加数据库图片只是为了尝试获取值。我再说一遍,我只对机器名(MakineAdı)的情况有问题。-您应该始终为所使用的任何varchar
变量和参数提供长度。否则,参数的默认长度为1个字符!我对日期查询没有问题,而且当我尝试仅根据无法找到的机器名makineadı进行查询时,例如在数据库中,我的机器名数据是Makine-1,当我尝试查找时,它无法向我显示Makine-1数据作为API表单,这有一个表单公共类RaporController:ApiController{public IHttpActionResult Getemprecords(字符串makineadı){HMienties1 sd=new HMienties1();var results=sd.Data(makineadı).ToList();return Ok(results);}}我认为这只是字符串(varchar)造成的格式问题,因为当我尝试根据DateTime值获取数据时不会出错。您可以设置某种类型的db/sql FIDLE。我怀疑问题只是机器名不匹配。
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;