【发布时间】:2017-07-22 12:46:39
【问题描述】:
下面是我用APP.Config写的sql查询
<add key="query" value="Select *
from POManage po
Where po.VendorID = @manufacturerid
and po.order_date between @StartDate and @EndDate order by PONumber asc"/>
这是我的程序 .cs 代码
int manufacturerid = 32;
DateTime StartDate = DateTime.Now.AddDays(-1);
DateTime EndDate = DateTime.Now;
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@manufacturerid", SqlDbType.BigInt,manufacturerid);
cmd.Parameters.AddWithValue("@StartDate", StartDate);
cmd.Parameters.AddWithValue("@EndDate", EndDate);
cmd.CommandType = CommandType.Text;
SqlDataAdapter ad = new SqlDataAdapter(query, con);
ad.Fill(ds);
但@manufacturerid 显示错误必须声明标量变量。
StartDate 和 EndDate 也会出现类似问题。
【问题讨论】:
-
不要将日期作为字符串传递,这肯定会导致转换问题。如果你想去掉时间部分并只传递你想要的日期值,请使用
DateTime.Date -
app.config可能不是存储查询的最佳位置。我建议使用资源或设置文件或配置文件。 -
为什么
po.order_date不是实际的date类型(为什么要转换为Date 类型)?如果要存储日期,则需要使用 Date 类型,这就是它的用途。否则一切都只是字符串,不会有类型之类的东西...... -
@Igor 它的要求我不能做任何事情
-
还有
WHERE po.VendorID = @manufacturerid,除非VendorID是字符串,否则不要将值括在引号中,在这种情况下,为什么它是字符串?
标签: c# asp.net ado.net app-config