2

我试图使用 case 语句为名为“query”的变量赋值。根据组合框的值,查询的值会发生变化。我在我的方法中分配了“查询”变量,并且只想在方法中使用它。我收到一条错误消息,指出“查询”变量未分配,即使它是在方法顶部分配的。我有一个解决方法,但我不知道为什么会这样?任何见解都会有所帮助。

继承人的代码。

public void ExportKml()
    {
        string query;

            switch (txtTable.SelectedIndex)
            {
                case 0:
                    query = "Select * from dbo.HyacinthWaterBodyZones";
                    break;
                case 1:
                    query="Select * from lchcd.privateWatersFinal where waterbodypolygon is not null";
                    break;
                case 2:
                    query = "Select * from lchcd.publicWatersFinal where waterbodypolygon is not null";
                    break;

            }

            cs.Open();
            SqlCommand cmd = new SqlCommand(query, cs);   <<--Error Message 
            SqlDataReader polygon = cmd.ExecuteReader();
}

行内的“查询”变量: SqlCommand cmd = new SqlComman(query,cs) 给出一个错误,说明它是未分配的局部变量。

4

3 回答 3

3

您需要为 分配一个初始值query。要么""要么string.Empty。您还应该在开关中包含一个default案例。见下文:

public void ExportKml()
{
    string query = string.Empty;

    switch (txtTable.SelectedIndex)
    {
        case 0:
            query = "Select * from dbo.HyacinthWaterBodyZones";
            break;
        case 1:
            query = "Select * from lchcd.privateWatersFinal where waterbodypolygon is not null";
            break;
        case 2:
            query = "Select * from lchcd.publicWatersFinal where waterbodypolygon is not null";
            break;
        default:
            query = "";
            break;
    }

    // Add a check for empty string before trying the query.
    if(!string.IsNullOrWhiteSpace(query))
    {
        cs.Open();
        SqlCommand cmd = new SqlCommand(query, cs);
        SqlDataReader polygon = cmd.ExecuteReader();
    }
}
于 2013-09-19T15:45:33.170 回答
3

因为编译器无法知道你SelectedIndex是否总是 0、1 或 2,所以强烈建议你初始化在 switch 之前定义但在它之后使用的变量

string query = string.Empty;
switch(.....)
{
    ....
}
if(query.Length > 0)
{
    cs.Open();
    SqlCommand cmd = new SqlCommand(query, cs);   <<--Error Message 
    SqlDataReader polygon = cmd.ExecuteReader();    
}

向 switch 语句添加默认情况也可以,但就我个人而言,我更喜欢在输入 switch 语句之前初始化查询变量。这对我来说更清楚,更不容易忘记一些其他重要的初始化

于 2013-09-19T15:46:20.300 回答
2

如果所选索引不是 0-2,则不会命中任何 case 语句。如果要default:switch.

switch (txtTable.SelectedIndex)
{
    case 0:
        query = "Select * from dbo.HyacinthWaterBodyZones";
        break;
    case 1:
        query="Select * from lchcd.privateWatersFinal where waterbodypolygon is not null";
        break;
    case 2:
        query = "Select * from lchcd.publicWatersFinal where waterbodypolygon is not null";
        break;
    default:
        //assign query = something here
        break;
}
于 2013-09-19T15:45:29.950 回答