来自APP.config的ADO.net查询无法正常工作

时间:2017-03-02 16:57:48

标签: c# asp.net ado.net app-config

下面是我在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。

1 个答案:

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