【问题标题】:How to return a string from a method?如何从方法中返回字符串?
【发布时间】:2015-03-29 05:54:15
【问题描述】:

问题

为什么我不能通过我的方法SQLSelection()返回我的变量SQL

我已声明它,然后重新分配它,然后返回它。但是这不起作用,并且伴随着多个错误消息,没有返回任何内容?

代码

private void SQLSelection()
{

    String SQL = null;

    if (comboBox1.Text == "All" & comboBox2.Text == "All")
    {
        String SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status in ('New','Hold')";
    }
    else if (comboBox1.Text == "All" & comboBox2.Text == "@status")
    {
        String SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status = @status";
    }
    else if (comboBox1.Text == "@username" & comboBox2.Text == "All")
    {
         String SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status = @username";
    }
    else
    {
        String SQL = "SELECT stationID, LocationName, plandate, username, status  FROM dbo.joblist WHERE username = @username and status = @status";
    }

    return String SQL;

}

【问题讨论】:

  • 你在 if 语句中重新声明了你的变量。
  • “连同多个错误消息” - 这些错误消息是什么?你了解他们吗?你试图做些什么来修复它们?
  • 这里有多个问题。 (1) 在顶部声明一次SQL。从其余部分前面删除“字符串”。 (2) 去掉返回值前面的“String”。 (3) 将函数签名中的void 更改为String。
  • 我敢打赌,其中一条错误消息的内容类似于“由于“SQLSelection()”返回 void,return 关键字后面不能跟对象表达式”......当然return String SQL; 有自己的问题......
  • 在稍微不相关的注释上,您有带有 @status 和 @username 等文本值的组合框?我有一种直觉,这不是你真正想要的......

标签: c# sql string methods


【解决方案1】:

您的返回类型是 void,而不是字符串。将其更改为:

private string SQLSelection()

void 是对某物执行的“不返回”操作,不会“返回”返回语句的值。如果您尝试返回一个值,则会遇到编译器错误。

另外,你不断地重新声明

String SQL

在每个方法中。只需通过删除每个 if 语句中的 String 声明来将值分配给 SQL。

最后,您的 return 语句再次尝试重新声明变量。

您生成的方法应如下所示:

private string SQLSelection()
{
    String SQL = null;

    if (comboBox1.Text == "All" & comboBox2.Text == "All")
    {
        SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status in ('New','Hold')";
    }
    else if (comboBox1.Text == "All" & comboBox2.Text == "@status")
    {
        SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status = @status";
    }
    else if (comboBox1.Text == "@username" & comboBox2.Text == "All")
    {
         SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status = @username";
    }
    else
    {
        SQL = "SELECT stationID, LocationName, plandate, username, status  FROM dbo.joblist WHERE username = @username and status = @status";
    }

    return SQL;
}

【讨论】:

    【解决方案2】:

    您的方法签名说返回void,这意味着该方法不返回任何内容。将其更改为:

    private string SqlSelection()
    

    你对SqlSelection 也有一些问题,我怀疑它甚至可以编译。尝试类似

    private string SqlSelection()
    {
       string sql = null;
    
       if (comboBox1.Text == "All" & comboBox2.Text == "All")
       {
         sql = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status in ('New','Hold')";
       }
       else if (comboBox1.Text == "All" & comboBox2.Text == "@status")    }
    
       ...
    
       return sql;
    }
    

    【讨论】:

      【解决方案3】:

      1) 您的返回类型应该是 String 而不是 void。 私有字符串 SQLSelection() {
      2)不要在 if 语句中重新声明您的变量: SQL = "SELECT ..";
      3)在 return 语句中不需要字符串: 返回 SQL;

      【讨论】:

        【解决方案4】:

        你也可以像这样在返回之前检查你的变量

        private string SQLSelection()
        {
        private String SQL = null;
        
        if (comboBox1.Text == "All" & comboBox2.Text == "All")
        {
            SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status in ('New','Hold')";
        }
        else if (comboBox1.Text == "All" & comboBox2.Text == "@status")
        {
            SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status = @status";
        }
        else if (comboBox1.Text == "@username" & comboBox2.Text == "All")
        {
             SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE status = @username";
        }
        else
        {
            SQL = "SELECT stationID, LocationName, plandate, username, status  FROM dbo.joblist WHERE username = @username and status = @status";
        }
        if(SQL != null)
            return SQL;
        else 
           return "any phrase you want ";
        

        }

        【讨论】:

          【解决方案5】:

          您的代码至少包含以下错误:

          1. 你的方法的返回类型被声明为void(意味着它没有任何返回值),所以你不能从它返回任何东西。将返回类型更改为string

            private string SQLSelection()
            
          2. 您正在尝试重新声明您分配给它的 SQL 变量,并在 return 语句中。例如,而不是:

                    String SQL = "…";
            

            应该只是:

                    SQL = "…";
            

            而不是:

                return String SQL;
            

            应该只是:

                return SQL;
            

            String SQL; 是声明 SQL 类型为 string 的变量的语法。您在方法的开头声明了该变量;以后不需要重新声明它。)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-27
            • 1970-01-01
            • 2013-12-26
            • 2016-05-19
            • 1970-01-01
            • 2011-11-16
            • 1970-01-01
            • 2022-01-23
            相关资源
            最近更新 更多