-1

我想从这个方法中返回一个变量。是的,我确实将其设为静态字符串。并试图返回 Messagebox.Show 所在的变量。我什至有一个相等的变量并试图返回它。但我似乎无法从 while 括号内返回。而且我无法让括号外的变量返回。该怎么办?该代码使用 MessageBox 工作,但我需要字符串变量。

static void rsnREAD(string dbTbl)
    {
        OleDbConnection machStopDB = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @"C:\Users\sgarner\Google Drive\Visual Studio 2012\Write_to_db\Write_to_db\Machine_Stop.accdb");
        //string sDate;
        //sDate = DateTime.Now.ToString("MM/dd/yyy HH:mm:ss");
        string str = "SELECT LAST(REASON) AS lastREASON FROM "+dbTbl+"";
        OleDbCommand rdCmd = new OleDbCommand(str, machStopDB);
        try
        {
            machStopDB.Open();
            OleDbDataReader reader = rdCmd.ExecuteReader();
            while (reader.Read())
            {
                MessageBox.Show(reader[0].ToString());
            }
            reader.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            machStopDB.Close();
        }
        machStopDB.Close();
    }
4

1 回答 1

3

只需String在 try 块之外创建变量并在从数据库中读取值时设置它。还将方法的返回类型更改为,string而不是void. 您可以使用if代替,while因为您只从数据库中读取一个值。

static string rsnREAD(string dbTbl)
    {
      string result = string.Empty;
      using(var machStopDB = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @"C:\Users\sgarner\Google Drive\Visual Studio 2012\Write_to_db\Write_to_db\Machine_Stop.accdb");
      {
        string str = "SELECT LAST(REASON) AS lastREASON FROM "+dbTbl+"";
        OleDbCommand rdCmd = new OleDbCommand(str, machStopDB);
        try
        {
          machStopDB.Open();
          using(var reader = rdCmd.ExecuteReader())
          {
            if(reader.Read())
            {
                result = reader[0].ToString();
            }
          }
        }
        catch (Exception ex) // Sample only. Catch only ones you need.
        {
            MessageBox.Show(ex.Message);
        }
      }
      return result;
    }

因此,如果返回值为空字符串,则数据库为空或出现错误。

于 2013-03-21T21:56:31.307 回答