如何将C# 的DATASET 直接写入(Insert)Oracle?
  private void TransferData(DataSet ds)
        {         //此处如何实现?
        }

解决方案 »

  1.   


    --参考:
    public int doInsertion(String myTableName,Hashtable paraTable,String tableID)
        {
     
            String strConnection = System.Configuration.ConfigurationManager.AppSettings"SQLConnectionString"];
            dbConnection = new SqlConnection(strConnection);
            dataSet = new DataSet();
            dbConnection.Open();
            String sql = "SELECT * FROM " + myTableName.ToString() + " WHERE " + tableID.ToString()+"= (SELECT MIN(" + tableID.ToString() + ") FROM " + myTableName.ToString() + ")";
    // 目前看来未必需要这个sql,但是空着似乎不行 因此就选择最小ID的schema做一个select
            
            dbAdapter = new SqlDataAdapter(sql, dbConnection);
            dbAdapter.Fill(dataSet,myTableName.ToString());
    //dataAdapter.Fill 不仅仅是填充数据 而且是填充schema 但是据说只有Fillschema才能把constrains也加入 目前还没有试过       
            dbConnection.Close();
            DataTable myDataTable = dataSet.Tables[myTableName.ToString()];
            DataRow myDataRow;
            myDataRow = myDataTable.NewRow();
     
    //将哈西表中的对应对一一填入schema中相应的项
            DataColumnCollection myDCC = myDataTable.Columns;
            for (int i = 0; i < paraTable.Count; i++)
            {
                myDataRow[i] = paraTable[myDCC[i].ColumnName.ToString()];
                
            }
            myDataTable.Rows.Add(myDataRow);
    //Add方法只适合添加一条记录        int result = dbAdapter.Update(dataSet, myTableName.ToString());
            return result;
    }
    /* 
    值得一提的是 虽然涉及到dataRow的schema但是没有任何关于到DataColumn的操作,
    因此想象中的 按dataColumn对应每个属性 完全没有必要,
    实际上DataColumn是对dataSet的某一个属性 所有row的一个集合,
    因此 从DataTable.Columns[0]提出的Column的一个实例 myColumn[5] 
    应该是第5行的针对这个属性的值
    */