c# - 如何根据机器名过滤获取 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?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;
默认日期也因上下文而异——这些错误可能很难调试。在您的情况下,默认值为varchar(1)
,这不是您想要的。
另一个潜在的问题是使用datetime
for 第二个参数。但是,你想要什么并不清楚:
- 如果你。
Tarih
是 adate
,然后将参数作为 a 传入date
。 - 如果
Tarih
是 adatetime
并且您想要同一日期的值,则传入 adate
并使用convert(date, Tarih) = @startdate
。 - 仅按原样使用代码,如果
Tarih
是datetime
(某种),并且您希望将比较降低到几分之一秒。
推荐阅读
- python - Python 表达式树只能包含三个值
- docker - 在 Compute Engine 上安装 Google Cloud SDK:权限被拒绝错误
- javascript - 如何修改数组数组,具体取决于其中的元素是否与另一个数组数组中的元素匹配?
- google-colaboratory - 在谷歌 colab 中使用 CDSAPI
- java - Spring boot -> 为什么我不需要在服务中捕获我的异常?
- ffmpeg - ffmpeg 我怎么知道使用了什么预设
- javascript - 为什么我的 React 功能组件多次返回?我需要它只运行一次
- node.js - 在 req.login Passport + React + Nodejs 之后等待的所有 Post/Get 请求
- coq - 如何证明一个空列表的子序列是空的?
- mysql - 在 MySQL 中合并两个查询以获得一个结果