我不知道如何处理从静态函数返回的多变量类对象.
您不能将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)
只需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)
几个笔记:
DataSet或DataTable.请注意,您没有使用它们.SqlDataReader还需要一个using街区.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)