我想从这个方法中返回一个变量。 是的我确实把它变成了静态字符串。并尝试返回Messagebox.Show所在的变量。我甚至将它等于一个变量,并试图将其返回。但我似乎无法从括号内返回。我无法将括号外的变量返回。该怎么办?代码使用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();
}
答案 0 :(得分:3)
只需在try块外部创建String
变量,并在从数据库中读取值时进行设置。同时将方法的返回类型更改为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;
}
因此,如果返回的值为空,则字符串数据库为空或存在错误。