1)如何把执行的SQL语句返回的结果集赋值给多维数组?
2)我用了此方法可以,但是有点问题,就是数组初始化的问题。另外我不想用System.Data.SqlClient.SqlDataReader类的Read()方法逐个赋值,请问有没有更简单执行效率更高的方法?我的程序如下:
System.Data.SqlClient.SqlCommand myCMD;
myCMD = new System.Data.SqlClient.SqlCommand("select codelen from codelevl where tblid='10' " , myConnection);
System.Data.SqlClient.SqlDataReader myReader =myCMD.ExecuteReader();
object[] oj=new object[5];//如果我不知道结果集的记录数,数组声明为object[] oj;但下面oj[i]依次赋值时报“用了没有初始化的数组错误”,请问如何解决这一问题?
int i=0;
while (myReader.Read())
 {

oj[i]=(myReader.GetValue(0));

i++;
}
肯请您的帮助,谢谢!!

解决方案 »

  1.   

    不太明白你所说的多维数组的意思.
    用list 比较方便.
      

  2.   

    当前是一维数组,因为目前是一个字段,如果SELECT 包含多个数组就需要赋值给多维数组了。呵呵,我想做成一个比较通用的东西!
      

  3.   

    我刚刚试了一下,可以,看代码。
    SqlConnection sqlconn = new SqlConnection("server=(local)\\JAMESLEE;Integrated Security=SSPI;database=Northwind;");
    SqlCommand cmd = new SqlCommand("select firstname from employees",sqlconn); try
    {
    sqlconn.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    object[] ob = new object[5];
    int i =0;
    while (dr.Read()) 
    {
    //ob[i] = dr.GetValue(0);dr[0],dr["Firstname"]
                                        //可以多试几种访问的方法。
    ob[i] = dr.GetSqlString(0);
    i++;
    if (i==5) break;
    }
    for(int j=0;j<5;j++)
    MessageBox.Show(ob[j].ToString());
    }
    catch(SqlException ex) 
    {
    MessageBox.Show(ex.Message);
    }
    finally 
    {
    sqlconn.Close(); }
      

  4.   

    我想可以是这个判断吧,if (i==5) break; 下标越界了!
      

  5.   

    楼上大侠和我的程序基本一样呀,如果用SqlDataReader 读,要解决数组初始化数组的长度的问题,因为我不知道结果集有几行,所以object[] ob = new object[5]中的5要动态生成。不过还要谢谢大侠的指点。
      

  6.   

    我很想帮你,但是不知可不可以。有没有这个能力,我刚刚又试了一种很蠢的方法。SqlConnection sqlconn = new SqlConnection("server=(local)\\JAMESLEE;Integrated Security=SSPI;database=Northwind;");
    SqlCommand cmd = new SqlCommand("select firstname from employees;select firstname from employees",sqlconn);

    try
    {
    sqlconn.Open();

    SqlDataReader dr = cmd.ExecuteReader();
    int count_rows = 0;
    while (dr.Read())
    {
    count_rows++; //先遍历一次整个表,得到总的记录行数
    }

    object[] ob = new object[count_rows]; //动态定义数组 int i= 0;
    dr.NextResult();
    while (dr.Read())
    {
    ob[i] = dr.GetValue(0);
    i++;

    }
    for(int j=0;j<count_rows;j++)
    MessageBox.Show(ob[j].ToString());
    }
      

  7.   

    SqlCommand cmd = new SqlCommand("select firstname from employees;select firstname from employees",sqlconn);
    读入两次同样的表,很占内存的。呵呵,没办法,C#中好像没有可以直接取得总记录数的函数或方法可调用,所以只能这样了。请高手出来!!
      

  8.   

    动态创建二维数组
    int[,] i = (int[,])Array.CreateInstance(typeof(int),3,4);
    动态创建一维
    int[] i1 = (int[])Array.CreateInstance(typeof(int),4);
      

  9.   

    int test = i.GetLowerBound(0);//上限
    int test1 =i.GetUpperbound(0);//下限
      

  10.   

    多谢楼上大侠的建议,不过还是定义了数组的长度。另外多谢kkk_visual(不学无术) 对笨贴的关注。有没有高手出来再指点一下。多谢!!
      

  11.   

    int[] lower ={1995,1};
    int[] lengths={10,4};Decimal[,] quarter = (Decimal[,])Array.CreateInstance(typeof(Decimal),lengths,lower);
    int a = quarter.GetLowerBound(0);
    int b = quarter.GetUpperBound(0);
    for(int year = a;year <=b;year++)
    {
             MessageBox.Show(year.ToString());
    for(int quarter1=quarter.GetLowerBound(1);quarter1<=quarter.GetUpperBound(1);quarter1++ )
    {
            MessageBox.Show(quarter[year,quarter1].ToString());
    }
    }
      

  12.   

    在程序中判断SqlDataReader中有多少列
    然后再用刚才的方法传变量进去动态创建
    Object[] ob = new Object[5];
    int i=0;
    ob[i]=;
    这语法是错误码的
    而且你只要不读取多个表
    用个二维数组就可以了,只指定它的行和列
    多个表就要另行考虑了。
      

  13.   

    string strSQL = "Select * From tb_Users";
    string strConnection = System.Configuration.ConfigurationSettings.AppSettings["SqlConnectionString"].ToString(); 
    Aifull.AifullCore.Data.DataManage dm = new Aifull.AifullCore.Data.DataManage(strConnection);
    try
    {
    DataSet ds = dm.getDataSet(strSQL);
    int num = ds.Tables[0].Rows.Count;
    object[] otest = new object[num];
    for(int i=0;i<num;i++)
    {
    otest[i] = ds.Tables[0].Rows[i][0];
    }
    }
    catch(Exception ex)
    {
    string message = "";
    }
      

  14.   

    楼上大侠的代码很好。只是用的Aifull.AifullCore.Data.DataManage应该是自定义的类,我这边不好调试,不过我可以变通一下。我先试试看,如果可以送分给您。呵呵!!当然前面几个朋友我也会记着你们对我的帮助的。
      

  15.   

    以上问题解决了。再一次谢谢各位,但还有一问题。如何判断数组中是否包含某个值,比如数组X中包含1--100共一百个数,我想知道某一个数是否再X中,有没有简单方法判断,不会用FOR循环或者WHILE循环吧?请各位执教!!
      

  16.   

    给你个建议吧,用ArraList来做数组装载你的东西,不用初始化大小,只需做简单的封,拆箱的处理
      

  17.   

    int[100] i;
    foreach(int num in i)
    {
        if(num=="你想要找的数")
    }
      

  18.   

    星剑好方法
    不过加到Arraylist中真的很好