c# - Select语句在db C#中没有得到任何数据
问题描述
这是我在 C# 中的 select 语句,我尝试通过参数输入 where 条件。但是当我输入参数时,这段代码在数据库中找不到任何数据。
我在 SQL Server 中的数据:
900000/2019-10-01/2019-10-01/313225100/143/100103/xxx0020190914/900000/12201/-/2500/2019-10-01 01:45:23.250
900000/2019-10-01/2019-10-01/313225100/143/100103/xxx0020190914/900000/12201/-/2500/2019-10-01 01:30:23.250
public List<Foo_MATISSUE> GetData_MATISSUE()
{
List<Foo_MATISSUE> dataListM = new List<Foo_MATISSUE>();
string connectionString = "Data Source=xxx; Initial Catalog=xxx;Integrated Security = false; User ID=xxx;Password=xxx";
string selectStatement = "SELECT WarehouseCode,TERM,MFGDATE,PRODUCTITEMCODE,LOTNO,MATITEMCODE,ISSUELOTNO,ISSUEPLANT,ISSUELOCATION,PROCESSCODE,ISSUEQTY,LASTUPDATED from V_MATISSUE where TERM =@TERM;";
try
{
using (var conM = new SqlConnection(connectionString))
{
using (var cmdM = new SqlCommand(selectStatement, conM))
{
conM.Open();
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@TERM";
parameter.SqlDbType = SqlDbType.VarChar;
parameter.Direction = ParameterDirection.Input;
parameter.Value = (dateTimePicker1.Value).Date.AddDays(-((dateTimePicker1.Value).Day) + 1).ToString("yyyy-MM-dd");
using (var readerM = cmdM.ExecuteReader())
{
while (readerM.Read()) //if
{
dataListM.Add(new Foo_MATISSUE
{
WarehouseCode = readerM.GetString(0),
TERM = readerM.GetDateTime(1),
MFGDATE = readerM.GetDateTime(2),
PRODUCTITEMCODE = readerM.GetString(3),
LOTNO = readerM.GetString(4),
MATITEMCODE = readerM.GetString(5),
ISSUELOTNO = readerM.GetString(6),
ISSUEPLANT = readerM.GetString(7),
ISSUELOCATION = readerM.GetString(8),
PROCESSCODE = readerM.GetString(9),
ISSUEQTY = readerM.GetDouble(10),
LASTUPDATED = readerM.GetDateTime(11)
});
}
}
}
}
}
catch (Exception e) { Console.WriteLine(e.StackTrace + "\n\n" + e.Message); }
return dataListM;
}
我认为这个源代码必须从数据库中获取 2 行。但是当我调试这段代码时,没有进入while (readerM.Read())
循环然后它catch
直接出错:
{"必须声明标量变量\"@TERM\"。"}
我尝试通过创建一个字符串参数来获取结果
string test = (dateTimePicker1.Value).Date.AddDays(-((dateTimePicker1.Value).Day) + 1).ToString("yyyy-MM-dd");
// ===> "2019-10-01"
你能帮我找出这个问题吗?
解决方案
您已经创建了一个参数对象,但尚未将其添加到命令的参数集合中。
按照此:
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@TERM";
parameter.SqlDbType = SqlDbType.VarChar;
parameter.Direction = ParameterDirection.Input;
parameter.Value = (dateTimePicker1.Value).Date.AddDays(-((dateTimePicker1.Value).Day) + 1).ToString("yyyy-MM-dd");
在执行命令之前您需要做的下一件事是添加参数:
cmdM.Parameters.Add(parameter);
推荐阅读
- android - 在 android 上的 tabclick FreshTabbedNavigationContainer 上弹出到根目录
- python - Pandas:如何防止 df.append() 返回 NaN 值
- bash - 如何为未在 bash 中退出的 gpg 命令返回退出值以验证错误的密码?
- c# - Wpf 中的 C# Vlc 包装器
- javascript - Wix Coded 下拉菜单卡住了
- system-verilog - 如何在特定信号开启后编写覆盖点来检查信号是否开启?
- flutter - Flutter dispose MethodChannel
- c++ - 尝试编写一个程序来生成文本文件中所有空格分隔的整数的总和
- javascript - 单击某些复选框时,如何使来自 javascript 的字符串出现在 html 中?
- r - 在部分匹配时合并 2 个 data.tables