我对public -v-private变量和范围有点疑问。
这是我的代码
private void PopulateCaseViewer(string paramField, string paramValue)
{
string strConnection = BuildConnectionString();
SqlConnection linkToDB = new SqlConnection(strConnection);
if (paramField == "load")
{
string sqlStat = "SELECT c.CaseNo, c.Claimant, c.Defendant, c.DOA, c.CaseType, c.CaseManager, c.Occupation, c.DateInstruction " +
"a.IPName, a.IPRegion, l.IPReference " +
"FROM tblCases AS c INNER JOIN tblIPLinks as l ON c.CaseNo = l.CaseNo " +
"JOIN tblIPAddresses AS a ON l.IPID = a.IPID;";
}
using (linkToDB)
using (var adapter = new SqlDataAdapter(sqlStat, linkToDB))
{
var table = new DataTable();
adapter.Fill(table);
dataCaseViewer.DataSource = table;
}
}
问题是,“using(var adapter = new SqlDataAdapter。...)”行中的字符串sqlStat表明sqlStat“在当前上下文中不存在”。
我的目标是在此方法上添加许多IF语句,具体取决于传递给它的paramField和paramValues,以便构建不同的sqlStats以根据用户输入填充dataCaseViewer.DataSource。但是如果SqlDataAdapter中的后续调用无法看到来自IF语句的sqlStat变量,那么我有点卡住了。
请提出任何建议。
答案 0 :(得分:2)
那是因为你在它上面的IF语句中定义了sqlStat,这使得它只在该语句中有效。
在IF上面定义sqlStat,在IF中设置它,它应该可以正常工作。
string sqlStat = System.String.Empty;
if (paramField == "load")
{
sqlStat = "SELECT...";
答案 1 :(得分:1)
那就这么说吧 - 如果if
不是“加载”,您希望使用什么而不是paramField
语句中指定的值?你期望构建什么SQL语句?
您可能需要声明 paramField
语句之外的if
,并确保无论采用何种路径,都会在您之前为其分配适当的值用它。
答案 2 :(得分:1)
string sqlStat;
if (paramField == "load")
{
sqlStat = "SELECT c.CaseNo, c.Claimant, c.Defendant, c.DOA, c.CaseType, c.CaseManager, c.Occupation, c.DateInstruction " +
"a.IPName, a.IPRegion, l.IPReference " +
"FROM tblCases AS c INNER JOIN tblIPLinks as l ON c.CaseNo = l.CaseNo " +
"JOIN tblIPAddresses AS a ON l.IPID = a.IPID;";
}
using (linkToDB)
using (var adapter = new SqlDataAdapter(sqlStat, linkToDB))
{
...
应该有用。
答案 3 :(得分:1)
private void PopulateCaseViewer(string paramField, string paramValue)
{
string strConnection = BuildConnectionString();
SqlConnection linkToDB = new SqlConnection(strConnection);
if (paramField == "load")
{
string sqlStat = "SELECT c.CaseNo, c.Claimant, c.Defendant, c.DOA, c.CaseType, c.CaseManager, c.Occupation, c.DateInstruction " +
"a.IPName, a.IPRegion, l.IPReference " +
"FROM tblCases AS c INNER JOIN tblIPLinks as l ON c.CaseNo = l.CaseNo " +
"JOIN tblIPAddresses AS a ON l.IPID = a.IPID;";
using (linkToDB)
using (var adapter = new SqlDataAdapter(sqlStat, linkToDB))
{
var table = new DataTable();
adapter.Fill(table);
dataCaseViewer.DataSource = table;
}
}
}
slqStat在IF中定义..因此你需要使用if中的所有内容
答案 4 :(得分:1)
您在if语句中分配了字符串,并尝试在其外部使用它。
答案 5 :(得分:0)
不是上下文问题,只是逻辑失败。
如果paramfield =“load”,你只声明sqlstat,所以如果没有。它没有声明,所以你不能使用它....
在if中使用它或在外面声明它,如果你执行后者,你需要将它设置为其他东西。
string sqlStat = String.Empty;
if (paramfield = "load")
{
sqlstat = "...";
}
else
{
//?
}
using...