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);
            }
        }