C#SQL查询中的变量无法正常工作

时间:2018-06-02 06:58:01

标签: c# sql-server

我有一个循环,我抓住某些ID来在数据库中进行调用。查询中有2个变量。

第一个工作正常,但第二个没有返回。我已经测试了很多,并且知道正确的值是通过查询得到的。不知道我在这里做错了什么。我用一个我知道正在返回的硬编码值替换变量,它工作正常。

这是我的代码:

SqlDataAdapter d8;

d8 = new SqlDataAdapter("SELECT SUM(CAST(AMOUNT AS BIGINT)) AS NEW_AMOUNT 
                         FROM ddb_proc_log_base 
                         WHERE (PROVID = " + docId + 
                       " AND CHART_STATUS = 90 
                         AND YEAR(PLDATE) = 2016 
                         AND CLASS = 2 
                         AND ORD = " + defer + ") OR (ORD = " + defer +
                       " AND PROVID = " + this.getDocHygDS.Tables[0].Rows[t]["HYG_ID"] + 
                       " AND CHART_STATUS = 90 
                         AND YEAR(PLDATE) = 2016 AND CLASS = 2)", conn3);

cmdBuilder5 = new SqlCommandBuilder(d8);
d8.Fill(this.balances);

2 个答案:

答案 0 :(得分:0)

@Tyler Nichol你错过了连接字符串值的单引号,如

示例ORD = '" + defer + "'

下面是一个例子:

try{
    "select * from SomeTable where name='"+name+","


// in your case this may like the following

    d8 = new SqlDataAdapter("select SUM(CAST(AMOUNT AS BIGINT)) AS NEW_AMOUNT 
        FROM ddb_proc_log_base where ( PROVID = "+docId+" AND CHART_STATUS = 90 
        AND YEAR(PLDATE) = 2016 AND CLASS = 2 AND ORD = '" + defer + "') OR (ORD = '" 
        + defer + "' AND PROVID = " + this.getDocHygDS.Tables[0].Rows[t]["HYG_ID"] 
        + " AND CHART_STATUS = 90 AND YEAR(PLDATE) = 2016 AND CLASS = 2)", conn3);
}
catch(Exception e)
{
//Throw Null Exception Here
}

推荐的解决方案

try{
        string UserName="John";
        cmd.CommandText = "select * from SomeTable where name=@Name";
        cmd.Parameters.AddWithValue("@Name", UserName);
}
catch(Exception e)
{
//Throw Null Exception Here
}

答案 1 :(得分:0)

您需要在查询中使用CONTAIN:

            DataSet getDocHygDS = new DataSet();
            string[] hyg_id = getDocHygDS.Tables[0].AsEnumerable().Select(x => x.Field<string>("HYG_ID")).Distinct().ToArray();
            string or = "'" + string.Join("' OR '", hyg_id) + "'";

            SqlDataAdapter d8;
            string query = string.Format("SELECT SUM(CAST(AMOUNT AS BIGINT)) AS NEW_AMOUNT" +
                              " FROM ddb_proc_log_base" +
                              " WHERE (PROVID = {0}" +
                              " AND CHART_STATUS = 90" +
                              " AND YEAR(PLDATE) = 2016" +
                              " AND CLASS = 2" +
                              " AND ORD = {1})" +
                              " OR" +
                              " (ORD = {1}" +
                              " AND CONTAINS(PROVID, {2})" +
                              " AND CHART_STATUS = 90" +
                              " AND YEAR(PLDATE) = 2016 AND CLASS = 2)", docId, defer, or);

            d8 = new SqlDataAdapter(query, conn3);
            cmdBuilder5 = new SqlCommandBuilder(d8);
            d8.Fill(this.balances);