这是我从数据库中得到数据的操作:                    SqlCommand Selectcmd = new SqlCommand("select PackageDetail_Info.Count,Project_Info.Price,Project_Info.Project_ID from PackageDetail_Info,Project_Info where PackageDetail_Info.Project_ID=Project_Info.Project_ID and Package_ID='" + Package_ID + "'", conn);
                    System.Data.SqlClient.SqlDataReader dr = Selectcmd.ExecuteReader();
                    int k = 0;
                    //计算价格
                    while (dr.Read())
                    {
                        int count = dr.GetInt32(0);
                        double Price = dr.GetDouble(1);
                        total = total + count * Price;
                        string Project_ID=dr.GetString(2);
                    }
                    total = total * double.Parse(Discount);
                    Session["Total"] = total;
                    dr.Close();
我想要将得到的count,Project_ID插入到另一个表Customer_Package_count中,本来可以直接用下面的SQL语句直接实现:
 SqlCommand Insertcmd1 = new SqlCommand("INSERT INTO Customer_Package_count(Customer_ID,Project_ID,Package_ID,Count)SELECT Customer_info.Customer_ID,Project_Info.Project_ID,Package_Info.Package_ID,PackageDetail_Info.Count FROM Customer_info,Project_Info,Package_Info,PackageDetail_Info WHERE Customer_info.Customer_ID=Package_Info.Customer_ID AND Package_Info.Package_ID=PackageDetail_Info.Package_ID AND PackageDetail_Info.Project_ID=Project_Info.Project_ID AND Customer_info.Customer_ID='0000000005'", conn);
                    k = k + Insertcmd1.ExecuteNonQuery();//执行插入操作
但是这个在数据库中写可以实现,但是搬到这里就不行了。
所以我就想着能不能定义一个集合来保存我从数据库中得到的多行count,Project_ID值,再一条一条的插入到数据库中,但是小弟才疏学浅,不会定义集合,所以还请大神指点!!

解决方案 »

  1.   

    直接使用DataSet/DataTable而不是DataReader好了。
      

  2.   

    可以具体点儿吗?DataSet/DataTable我都没用过?谢谢了!
      

  3.   

    比如说你可以先定义一个业务实体类型,例如public class MyObj
    {
        public string Name;
        public double Value;
    }然后在查询中就可以写:
                List<MyObj> result;
                using (var conn = new OracleConnection(cnStr))
                {
                    conn.Open();
                    var comm = conn.CreateCommand();
                    comm.CommandText = "select * from ..........";
                    comm.CommandType = System.Data.CommandType.Text;
                    result = ( from DbDataRecord record in comm.ExecuteReader()
                                let name = (string)record["TheName"]
                                select new TableDefine { 
                                                Name = name,
                                                Value = (double)record["Number"]
                                           };
                             ).ToList();
                }    
      

  4.   

    DataReader只读~
    string sqlStr;
    sqlStr="要执行的语句";                         
    SqlDataAdapter adapter = new SqlDataAdapter(sqlStr,conn);    //实例化数据库适配器DataTable dt = new DataTable();    //定义一个表用来储存数据源的数据,该表存在内存缓冲中。
    adapter.Fill(dt);                     //将adapter的数据填充到表dt中。然后,对表操作~
      

  5.   

    我一直觉得培训班不教你linq也就算了,DataTable都不教就发指了。
      

  6.   

    datatable没用过?那你用过什么?
      

  7.   

    sorry!把类型名字写错了,应该为select new MyObj{ 
                                                Name = name,
                                                Value = (double)record["Number"]
                                           };
      

  8.   

    定义一个实体类来存储,List<实体类>
      

  9.   


    其实我很想知道你这么写有什么好处,相对于传统的数据操作模式,还有就是
    在你回复另一篇帖子上  封装一个高级一点的SQLHelper时返回 DbDataReader 的所谓公共类是被认为有设计思路错误的。  这个返回DbDataReader 有什么错误呢(我一直使用IDataReader返回的)