如何将MySQL查询中返回的结果转换为C#.Net / Mono
中的数组根据我的理解,您需要使用数组将包含的项目数来定义数组,但我知道DataReader不会告诉您返回了很多行。那么如何定义一个数组。
到目前为止,我有:
string sqlWhere;
if ((name != None) && (name != ""))
sqlWhere = "WHERE name LIKE '%"+name+"%'";
if ((company != None) && (company != ""))
if (sqlWhere == "")
sqlWhere = "WHERE company LIKE '%"+company+"%'";
else
sqlWhere = sqlWhere + " AND company LIKE '%"+company+"%'";
if ((dateFrom != None) && (dateFrom != "") && (dateTo != None) && (dateTo != ""))
if (sqlWhere == "")
sqlWhere = "WHERE date(timestampIn) BETWEEN '"+dateFrom+"' AND '"+dateTo+"'";
else
sqlWhere = sqlWhere + " AND date(timestampIn) BETWEEN '"+dateFrom+"' AND '"+dateTo+"'";
IDbCommand dbcmd = this.dbcon.CreateCommand();
dbcmd.CommandText = "SELECT * FROM visitors " + sqlWhere;
MySqlDataReader Reader = dbcmd.ExecuteReader();
while (Reader.Read())
{
}
答案 0 :(得分:2)
public IList<Group> GetGroup()
{
Connection c = new Connection();
String connectionString = c.ConnectionName;
OleDbConnection conn = new OleDbConnection(connectionString);
OleDbCommand mycmd = conn.CreateCommand();
DataSet dspendingapps = new DataSet();
dspendingapps.Clear();
mycmd.CommandText = " select g.groupid,g.groupname from tbl_group g order by g.groupname ";
conn.Open();
OleDbDataAdapter appreader = new OleDbDataAdapter(mycmd);
appreader.Fill(dspendingapps);
conn.Close();
IList<Group> g = new List<Group>();
foreach (DataRow drapp in dspendingapps.Tables[0].Rows)
{
Group gg = new Group();
gg.GroupId = Convert.ToInt16(drapp["groupid"]);
gg.Name = drapp["groupname"].ToString();
g.Add(gg);
}
return g;
}
答案 1 :(得分:1)
使用DataReader
填充DataAdapter
,而不是使用DataTable
。您可以在结果DataTable
中看到总行数。
var results = new DataTable();
var adapter = new SqlDataAdapter();
adapter.SelectCommand = dbcmd;
dapater.Fill(results);
答案 2 :(得分:1)
您可以使用List<T>
输入代码而不是数组来存储您的数据,其中T是您要存储的数据类型,例如string,int或您的自定义数据类型。对于使用Arrays,我们需要在编译时指定长度,但使用List<T>
我们可以存储数据而不必担心长度。
答案 3 :(得分:1)
扩展@Deepansh Gupta的响应:您可以考虑创建一个自定义对象或结构,其内部数据字段对应于查询结果集中返回的列(即,每个对象对应一个数据行,对象中的每个数据变量对应于柱状数据)。当您的代码遍历结果的每一行时,创建一个新的自定义对象并将其附加到您的列表中。