如何根据机器名过滤获取 SQL 数据值?
Posted
技术标签:
【中文标题】如何根据机器名过滤获取 SQL 数据值?【英文标题】:How can I get SQL data values according to machine name filtering? 【发布时间】:2021-05-03 07:47:23 【问题描述】:当我试图获取机器地址的特定数据值时,我无法获取此值
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?makineadı=192.168.0.8&&startdate=2021-01-29
这是我的数据库enter image description here
【问题讨论】:
用您正在使用的数据库标记您的问题。sd.Data
是做什么的?这是执行存储过程并处理结果的方法。如果编写得当,即如果它使用参数化查询,则根本不需要转换或引用
我认为这只是字符串(varchar)格式问题引起的,因为当我尝试根据 DateTime 值获取数据时不会出错。 sd.Data 是我在第一个查询中添加到下面的存储过程的数据表示名称
我添加我的数据库图片只是为了尝试获取值。我再次说我只有机器名称(MakineAdı)的问题。
Bad habits to kick : declaring VARCHAR without (length) - 您应该始终为您使用的任何varchar
变量和参数提供一个长度。否则,您的参数将具有 1 个字符的默认长度!
【参考方案1】:
您的代码看起来像 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
(某种形式)并且您希望将比较时间缩短到几分之一秒时才按原样使用代码。
【讨论】:
我对日期查询没有问题,同样当我尝试仅根据机器名称进行查询时,例如在数据库中找不到的机器名称是 makineadı,我的机器名称数据是 Makine-1找到localhost:44355/api/rapor?makineadı=Makine-1,它无法向我显示 Makine-1 数据作为 API 形成这有形成 public class RaporController : ApiController public IHttpActionResult Getemprecords(string makineadı) HMIEntities1 sd = new HMIEntities1();var results = sd.Data (makineadı).ToList();返回确定(结果); 我认为这只是字符串(varchar)格式问题引起的,因为我在尝试根据 DateTime 值获取数据时不会出错 您可以设置某种 db/sql 小提琴。我怀疑问题只是机器名称不匹配。以上是关于如何根据机器名过滤获取 SQL 数据值?的主要内容,如果未能解决你的问题,请参考以下文章
oracle如何获取调用者的IP,机器名等信息,以及他们操作的SQL
如何根据 Where 条件获取 Redshift 中的上述值?