如何处理从静态函数返回的多变量类对象

ema*_*ica -1 c# asp.net class

我不知道如何处理从静态函数返回的多变量类对象.

您不能将foreach语句与对象一起使用.

如何从静态函数中获取一个类对象数组?

Default.aspx.cs

protected void Button1_Click(object sender, EventArgs e)
{
    ID = TextBox1.Text;
    object returnedData = Getdata(ID);
    ????

}
public static object Getdata(string ID)
{
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    List<dataclass> returndata = new List<dataclass>();
    dataclass dc = new dataclass();
    string connStr = ConfigurationManager.ConnectionStrings["jsonobject"].ConnectionString;
    string cmdStr = "SELECT ([idd],[datetime],[col1],[col2],[col3]) FROM [jsondata] WHERE [idd]=@idd;";
    try
    {
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
            {
                conn.Open();
                cmd.Parameters.AddWithValue("@idd", ID);
                SqlDataReader myReader = cmd.ExecuteReader();
                if (myReader.Read())
                {
                    dc.idd = Convert.ToString(myReader["idd"]);
                    dc.datetime = Convert.ToString(myReader["datetime"]);
                    dc.col1 = Convert.ToString(myReader["col1"]);
                    dc.col2 = Convert.ToString(myReader["col2"]);
                    dc.col3 = Convert.ToString(myReader["col3"]);
                    returndata.Add(dc);
                }
            }
        }
    }
    catch (Exception ex)
    {

    }
    return returndata;
}
Run Code Online (Sandbox Code Playgroud)

将Class1.cs

public class dataclass
{
    public string idd { get; set; }
    public string datetime { get; set; }
    public string col1 { get; set; }
    public string col2 { get; set; }
    public string col3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ers 5

只需List<dataclass>从方法返回.

protected void Button1_Click(object sender, EventArgs e)
{
    ID = TextBox1.Text;
    List<dataclass> returnedData = Getdata(ID);
    foreach (var dc in returnedData)
    {
        // Do something with dc.idd, dc.datetime, dc.col1, dc.col2, dc.col3
    }

}

public static List<dataclass> Getdata(string ID)
{
    List<dataclass> returndata = new List<dataclass>();
    string connStr = ConfigurationManager.ConnectionStrings["jsonobject"].ConnectionString;
    string cmdStr = "SELECT ([idd],[datetime],[col1],[col2],[col3]) FROM [jsondata] WHERE [idd]=@idd;";
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
        {
            conn.Open();
            cmd.Parameters.AddWithValue("@idd", ID);
            using (SqlDataReader myReader = cmd.ExecuteReader())
            {
                if (myReader.Read())
                {
                    dataclass dc = new dataclass();
                    dc.idd = Convert.ToString(myReader["idd"]);
                    dc.datetime = Convert.ToString(myReader["datetime"]);
                    dc.col1 = Convert.ToString(myReader["col1"]);
                    dc.col2 = Convert.ToString(myReader["col2"]);
                    dc.col3 = Convert.ToString(myReader["col3"]);
                    returndata.Add(dc);
                }
            }
        }
    }

    return returndata;
}
Run Code Online (Sandbox Code Playgroud)

几个笔记:

  1. 你不需要DataSetDataTable.请注意,您没有使用它们.
  2. 除非您需要,否则不要使用try/catch块.你本来可以隐藏自己的异常,这使得很难修复它们.
  3. SqlDataReader还需要一个using街区.
  4. 你应该dc每次循环创建一个新的.您的代码将创建一个单个实例dataclass,然后创建一个n对该同一实例的不同引用的列表.您可能会覆盖该实例的内容.

编辑:

假设[idd]列是表的主键,则总会返回一行,否则为零.在这种情况下,您不需要循环,也不需要返回列表.

protected void Button1_Click(object sender, EventArgs e)
{
    ID = TextBox1.Text;
    dataclass dc = Getdata(ID);
    if (dc != null)
    {
        // Do something with dc.idd, dc.datetime, dc.col1, dc.col2, dc.col3
    }
}

public static dataclass Getdata(string ID)
{
    string connStr = ConfigurationManager.ConnectionStrings["jsonobject"].ConnectionString;
    string cmdStr = "SELECT ([idd],[datetime],[col1],[col2],[col3]) FROM [jsondata] WHERE [idd]=@idd;";
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
        {
            conn.Open();
            cmd.Parameters.AddWithValue("@idd", ID);
            using (SqlDataReader myReader = cmd.ExecuteReader())
            {
                if (myReader.Read())
                {
                    dataclass dc = new dataclass();
                    dc.idd = Convert.ToString(myReader["idd"]);
                    dc.datetime = Convert.ToString(myReader["datetime"]);
                    dc.col1 = Convert.ToString(myReader["col1"]);
                    dc.col2 = Convert.ToString(myReader["col2"]);
                    dc.col3 = Convert.ToString(myReader["col3"]);
                    return dc;
                }
            }
        }
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)