【发布时间】:2017-07-24 13:20:16
【问题描述】:
当我尝试使用 query6 运行它时 --> [religion] = @religionVar 它只将表的标题返回到数据表中,但是当我对 query5 执行此操作时,它会将我返回到表中
string query5 = "SELECT * FROM[PhoneTableSql] WHERE[district] = '5' AND([religion] = @religionVar OR[religion] = '4')";
string query6 = "SELECT * FROM[PhoneTableSql] WHERE[district] = '6' AND([religion] = @religionVar OR[religion] = '4')";
如果我这样做,query6 会返回良好的表
string query5 = "SELECT * FROM[PhoneTableSql] WHERE[district] = '5' AND([religion] = @religionVar OR[religion] = '4')";
string query6 = "SELECT * FROM[PhoneTableSql] WHERE[district] = '6' AND([religion] = '1' OR[religion] = '4')";
我尝试运行它 mssql 并且它工作正常,但我无法解释为什么它首先工作而不能在另一个工作
string query5 = "SELECT * FROM[PhoneTableSql] WHERE[district] = '5' AND([religion] = @religionVar OR[religion] = '4')";
string query6 = "SELECT * FROM[PhoneTableSql] WHERE[district] = '6' AND([religion] = '1' OR[religion] = '4')";
using (SqlConnection con = new SqlConnection(@"Data Source=CATISERVER1\SQLEXPRESS;Initial Catalog=dsa;Persist Security Info=True;User ID=mcsager;Password=*******"))
{
try
{
SqlCommand cmd5 = new SqlCommand(query5, con);
cmd5.Parameters.AddWithValue("@religionVar", 1);
SqlCommand cmd6 = new SqlCommand(query6, con);
cmd6.Parameters.AddWithValue("@religionVar", 1);
SqlDataAdapter adpter5 = new SqlDataAdapter(cmd5);
adpter5.Fill(MyAppManager.ChangeFactorWeightsInstance.DtDistrict_5);
SqlDataAdapter adpter6 = new SqlDataAdapter(cmd6);
adpter6.Fill(MyAppManager.ChangeFactorWeightsInstance.DtDistrict_6);
}
catch{}
}
【问题讨论】:
-
可能是因为您传入了
INT值,但该列是VARCHAR(如查询中的单引号所示)。 -
您是否注意到
OR和[religion]之间没有空格? -
MyAppManager.ChangeFactorWeightsInstance.DtDistrict_6这行对你的数据表有什么作用?如果在 MSSQL 中运行按预期工作,您必须对返回结果做一些不同的事情。如果将query5传递给adapter6会发生什么?它们似乎具有相同的结构。 -
您可能想看看这篇文章。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…
-
“但不抛出异常” 好吧,你已经在这里吞下了它:
catch{}。大多数时候都清空捕获块are a bad idea。这相当于将黑色胶带贴在发动机警告灯上。
标签: c# sql asp.net .net sql-server