我有一个循环,我抓住某些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);
答案 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);