c#关于显示数据库里数据

2025-06-23 07:20:54
推荐回答(1个)
回答1:

两件事:第一 无论你用哪个数据库的连接库  无论是mysql mssql ODBC 返回执行结果后 实际上传给程序的是一个stream (流)

第二这个流不可回退,不可遍历,所以你用一个方法来取值 注定只能取到第一个值。 而且需要将步值前进一步时候 一定要用到Read()方法 才能进入下一行。


这却写法是:


(mssql 是System.Data.SqlClient 以下范例使用mysql 只要替换 类库名即可,类库下的方法,属性等名称完全一致,odbc源 也是如此)

MySqlCommand mySqlCommand = new MySqlCommand(sqlstr,  myconnect);//sql语句,已建立的连接
Stack resultid = new Stack();  //创建一个栈泛型,用来push进去得到的返回结果。因为我们的数据不需要回头,一路走下去所以栈的效率绝对最高。
Stack resultuser = new Stack(); 
MySqlDataReader reader = mySqlCommand.ExecuteReader(); //创建流式读取器
while (reader.Read()) 
{  
    if (reader.HasRows)
    {
   resultid .Push(reader.GetInt64("ID")); //ID是你的列名 取回值并压入栈
   resultuser .Push(reader.GetString("User"));
  //reader.GetInt64(0);//如果不知道列名只知道第几列用int作为参数
//你处理数据的地方注意如果数据库中的数据是null 用 GetInt64等直接取回数据会出现异常,可以用IsDBNull方法先判断再取值
    }
}
reader.Close();//最后要释放reader不然下一次调用reader一定会出现异常
mySqlCommand.Dispose(); //可根据实际需求选择是否释放资源

resultid .ToArray(); 最后将得到的结果转化为数组。接下来你就可以遍历这个数组进行输出或者其他处理了。
resultuser .ToArray();


当然 如果返回数据比较多列 你还可以自己建立个类然后 Stack result 也是完全可以的。效率依然很高比如 
public class YourObject{

    public long ID;

    public string User;

    public int Age;

    public string Name;

} //

Stack result = new Stack();

//在if(reader.HasRows)中改写为

if (reader.HasRows)

{

    result.Push(new YourObject(){

        ID = reader.GetInt64("ID"),

        User= reader.GetString("User"),

        Age= reader.GetInt32("Age"),

        Name= reader.GetString("Name"),

    });

}