2015-10-19 82 views
0

我写了一个单独的类,其中包含我的网站的权限。我在每个班级打电话给这个班级。我无法从我的权限类中取回值。我会告诉你我有如下:返回多个值C#

权限类

public class Permissions 
{ 
    public static string selectedNumber = ""; 
    public static string selectedName= ""; 
    public static string selectedLocation= ""; 

    public Info SetInfo(string selectedValue) 
    {   
     string selectInfo = "SELECT [Num] AS 'Number', [Name] AS 'Name', CONVERT(nvarchar(50),RTRIM(b.Num])) + ' - ' + CONVERT(nvarchar(50),b.Name) AS 'Location' " 
      + "FROM [TBL_Info] a " 
      + "left join [TBL_Where] b on (a.[ID] = b.[ID]) " 
      + "WHERE a.ID = @ID"; 

     sqlCmd = new SqlCommand(selectInfo, sqlConn); 
     sqlConn.Open(); 

     sqlCmd.Parameters.AddWithValue("@ID", selectedValue); 

     SqlDataReader rdrInfo = sqlCmd.ExecuteReader(); 

     if (rdrInfo.HasRows) 
     { 
      rdrInfo.Read(); 

      selectedNumber = rdrInfo .GetSqlString(rdrInfo .GetOrdinal("Number")).ToString(); 
      selectedName= rdrInfo .GetSqlString(rdrInfo .GetOrdinal("Name")).ToString(); 
      selectedLocation = rdrInfo .GetSqlString(rdrInfo .GetOrdinal("Location")).ToString(); 
     } 
     sqlCmd.Connection.Close(); 

     return new Info() 
     { 
      number= selectedNumber, 
      name= selectedName, 
      location= selectedLocation 

     }; 
    } 

    public class Info 
    { 
     public String number{ get; set; } 
     public String name{ get; set; } 
     public String location{ get; set; } 
    } 
} 

目前我想它调用另一个类是这样的:

Classes.Permissions permission = new Classes.Permissions(); 
permission.SetInfo(selectedUserValue); 

最终产品,是我所文本框中的类我试图使用来自permission.SetInfo()的3个返回值的电话

目前我无法获得任何返回....我知道我明显地做错了什么。那么有人可以给我一些关于如何实现这一目标的建议吗?

+1

你不保存您正在返回对象'VAR信息=权限.SetInfo(selectedUserValue);'之后,你可以使用'info'变量 –

+0

对,我看到...但是我将如何返回3个对象?在列表中? – Code

+0

您应该在'using'块中打开sql连接,以便它始终关闭。 –

回答

2

除了我遇到的一些风格问题之外,代码看起来应该起作用(只要数据库中有数据)。要从方法返回多个值,请创建一个新对象(即Info),该对象定义要返回的内容。

所以,你应该能够写类似:

Textbox txtBox; 

var info = new Classes.Permissions().SetInfo(SelectedUserValue); 

txtBox.Text = 
     info.number ?? "<null>" + " " + 
     info.name ?? "<null> + " " + 
     info.location ?? "<null>' 

请注意,我用的是空合并运算符(??)作为SetInfo可以返回的Info,所有成员都null如果没有行实例从数据库查询中返回。

顺便说一句,另一路从一个方法返回多个值是使用out参数:

Textbox txtBox; 
string number; 
string name; 
string location; 

new Classes.Permissions().SetInfo(SelectedUserValue, out number, out name, out location); 

然后你SetInfo会是什么样子:

public void SetInfo(string SeelctedUserValue, 
    out string number, out string name, out string location) 
{ 
    //assign values to number,name and location 
} 

要返回多个实例相同的对象,比你的方法应该返回

  1. 一个IEnumerable(即ListArray),
  2. 一个Tuple<>
  3. 的容器对象。

例如,如果你知道你要返回恰好有三个,你可能希望有你的方法返回Tuple<Info,Info,Info>

public Tuple<Info, Info, Info> SetInfo(string SeelctedUserValue) 
{ 
    //query db 
    return new Tuple<Info, Info, Info>(
    new Info{ number = "number", name = "name", location="location}, 
    new Info{ number = "number", name = "name", location="location}, 
    new Info{ number = "number", name = "name", location="location});   
} 
+0

输出参数看起来更容易... – Code

+0

有几种方法可以做你想做的事情。你必须决定哪种方法最适合你的情况和环境。 –

+0

我有我的最初的方式和参数工作。将决定什么是最适合我的。非常感谢你 – Code