微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据机器名称过滤获取 SQL 数据值?

如何解决如何根据机器名称过滤获取 SQL 数据值?

当我尝试获取机器地址的特定数据值时,我无法获取此值

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 作为第二个参数。但是,您想要的尚不清楚:

  • 如果你。 Tarihdate,然后将参数作为 date 传入。
  • 如果 Tarihdatetime 并且您希望这些值位于相同的日期,则传入 date 并使用 convert(date,Tarih) = @startdate
  • 仅在 Tarihdatetime(某种类型的)并且您希望将比较时间缩短到几分之一秒时按原样使用代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。