下面是我在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。
答案 0 :(得分:2)
首先,将命令查询保留在appconfig
中是一个非常糟糕的主意您已经使用查询创建了一个命令。您需要将命令传递给Adapter。不查询。
int manufacturerid = 32;
StartDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
EndDate = DateTime.Now.ToString("yyyy-MM-dd");
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(cmd);
ad.Fill(ds);
并在查询中将Where po.VendorID = '@manufacturerid'
更改为Where po.VendorID = @manufacturerid
<强>更新强>
int manufacturerid = 32;
var query = @"Select * from POManage po
Where po.VendorID = @manufacturerid
and CONVERT(DATE, po.order_date) between @StartDate and @EndDate
order by PONumber asc";
var startDate = DateTime.Now.AddDays(-1);
var endDate = DateTime.Now;
var connectionString = "your connection string";
var dataTable = new DataTable();
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlDataAdapter adapter = new SqlDataAdapter(query, con))
{
adapter.SelectCommand.Parameters.AddWithValue("@manufacturerid", manufacturerid);
adapter.SelectCommand.Parameters.AddWithValue("@StartDate", startDate);
adapter.SelectCommand.Parameters.AddWithValue("@EndDate", endDate);
adapter.Fill(dataTable);
}
}