ADO.net 来自 APP.config 的查询无效
ADO.net query from coming from APP.config not working
下面是我用 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 将出现类似问题。
首先,将命令查询保留在 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);
}
}
下面是我用 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 将出现类似问题。
首先,将命令查询保留在 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);
}
}