static void Main(string[] args) { bool debug = Properties.Settings.Default.Verbose; U2Conn srcConn = new U2Conn(); SqlConn destConn = new SqlConn(); srcConn.Host = Properties.Settings.Default.U2Host; // "pmsteel.kwyk.net"; srcConn.Login = Properties.Settings.Default.U2Login; // "administrator"; srcConn.Password = Properties.Settings.Default.U2Password; // "H!carb0n"; srcConn.Catalog = Properties.Settings.Default.U2Account; // "C:\\BAI.PROD\\PM"; destConn.Host = Properties.Settings.Default.SqlHost; // "pmsteel.kwyk.net"; destConn.Login = Properties.Settings.Default.SqlLogin; // "pmsteel"; destConn.Password = Properties.Settings.Default.SqlPassword; // "H!carb0n"; destConn.Catalog = Properties.Settings.Default.SqlDatabase; // "pmsteel" /* try { srcConn.Connect(); destConn.Connect(); srcConn.Disconnect(); destConn.Disconnect(); } catch (Exception e) { debugPrint(true, "Error: " + e); } */ String sqlStmt = ""; try { // every thing runs out of the UniSession instance. UniSession uSession = null; //Set up variables. uSession = UniObjects.OpenSession(Properties.Settings.Default.U2Host, Properties.Settings.Default.U2Login, Properties.Settings.Default.U2Password, Properties.Settings.Default.U2Account); debugPrint(debug, "U2 openSession succeeded\n"); debugPrint(debug, "Status = " + uSession.Status + "\n"); //Class.forName("net.sourceforge.jtds.jdbc.Driver"); //Connection conn = DriverManager.getConnection(sqlJdbcUrl, sqlUser, sqlPass); //debugPrint(debug, "SQL Server connection succeeded"); //Statement stmt = conn.createStatement(); UniFile uf = uSession.CreateUniFile(Properties.Settings.Default.U2File); debugPrint(debug, Properties.Settings.Default.U2File + " file opened\n"); //debugPrint(debug, uf.ToString()); UniSelectList usl = uSession.CreateUniSelectList(8); StreamWriter sw = new StreamWriter(@"c:\temp\u2rl.xml"); usl.Select(uf); while (!usl.LastRecordRead) { String key = usl.Next(); debugPrint(debug, "key: " + key + "\n"); if (key != "") { XElement xd = new XElement("data"); XElement xd2 = new XElement("data"); UniDynArray udaRow = uf.Read(key); int v2 = 0; int s2 = 1; while (s2 > 0) { XElement xv2 = new XElement("val", new XAttribute("loc", s2)); s2 = 0; for (int f2 = 1; f2 <= udaRow.Dcount(); f2++) { if ( s2 <= udaRow.Dcount(f, v)) { XElement xf2 = new XElement("fld", new XAttribute("loc", f2)); string fld = udaRow.Extract(f2, v2).ToString(); if ("" != fld) { } } } for (int f = 1; f <= udaRow.Dcount(); f++) { XElement xf = new XElement("fld", new XAttribute("loc", f)); string fld = udaRow.Extract(f).ToString(); if ("" != fld) { for (int v = 1; v <= udaRow.Dcount(f); v++) { XElement xv = new XElement("val", new XAttribute("loc", v)); string val = udaRow.Extract(f, v).ToString(); if ("" != val) { for (int s = 1; s <= udaRow.Dcount(f, v); s++) { xv.Add(new XElement("sub", new XAttribute("loc", s), udaRow.Extract(f, v, s).ToString())); } } xf.Add(xv); } } xd.Add(xf); } XElement xr = new XElement("row", new XElement("id", key), xd); sqlStmt = "INSERT INVF(u2_id, u2_data) VALUES ('" + key.Replace("'", "''") + "', '" + xd.ToString().Replace("'", "''") + "')"; sw.WriteLine(xr); } } sw.Close(); //UniDynArray udaRow = uSession.CreateUniDynArray(usl.Next()); //debugPrint(debug, usl.readList().ToString()); //while (!usl.IsLastRecordRead) //while (null != udaRow) //{ //String usKey = udaRow.Extract(1).ToString(); //Properties.Settings.Default.SqlTable = usKey; //debugPrint(debug, "key: " + usKey + "\n"); //debugPrint(debug, usKey.ToString() + ": " + Properties.Settings.Default.SqlTable); //sqlStmt = "IF EXISTS (SELECT * FROM sys.tables WHERE OBJECT_ID('dbo.[" + Properties.Settings.Default.SqlTable + "]') IS NOT NULL) DROP TABLE dbo.[" + Properties.Settings.Default.SqlTable + "]"; //debugPrint(debug, sqlStmt); //stmt.executeUpdate(sqlStmt); //sqlStmt = "CREATE TABLE dbo.[" + Properties.Settings.Default.SqlTable + "] (ID varchar(255) NOT NULL,LOC smallint NOT NULL,SEQ smallint NOT NULL,VAL varchar(8000) NOT NULL)"; //debugPrint(debug, sqlStmt); //stmt.executeUpdate(sqlStmt); //{{ int valIdx = 1; int fldIdx = 1; //for (int fldIdx = 1; fldIdx <= udaRow.Dcount(); fldIdx++) //{ // debugPrint(debug, "field: " + udaRow.Extract(fldIdx).ToString()); // for (int valIdx = 1; valIdx <= udaRow.dcount(fldIdx); valIdx++) // { // UniString usValue = udaRow.extract(fldIdx, valIdx); // debugPrint(debug, usValue.ToString()); // } //} //UniFile ufTblFile = uSession.open(usKey); //debugPrint(debug, "file opened"); ////debugPrint(debug, usKey.ToString()); //UniSelectList uslTblList = uSession.selectList(2); //uslTblList.select(ufTblFile); //UniString usTblKey = uslTblList.next(); //int cnt = 0; //while (!uslTblList.isLastRecordRead()) //{ // if (cnt++ % 1000 == 0) debugPrint(debug, "rows: " + cnt); // //debugPrint(debug, usTblKey.ToString()); // UniDynArray udaTblRow = new UniDynArray(ufTblFile.read(usTblKey)); // for (int fldTblIdx = 1; fldTblIdx <= udaTblRow.dcount(); fldTblIdx++) // { // for (int valTblIdx = 1; valTblIdx <= udaTblRow.dcount(fldTblIdx); valTblIdx++) // { // UniString usTblValue = udaTblRow.extract(fldTblIdx, valTblIdx); // //debugPrint(debug, usTblValue.ToString()); // sqlStmt = "INSERT [" + Properties.Settings.Default.SqlTable + "] VALUES ('" + usTblKey.ToString().replace("'", "''") + "', " + fldTblIdx + ", " + valTblIdx + ", '" + usTblValue.ToString().replace("'", "''") + "')"; // //debugPrint(debug, sqlStmt); // //stmt.executeUpdate(sqlStmt); // } // } // usTblKey = uslTblList.next(); //} //udaRow = uSession.CreateUniDynArray(usl.Next()); //} /* udaKeys = usl.readList(); //UniDynArray udaValues; sqlStmt = "TRUNCATE TABLE [" + Properties.Settings.Default.SqlTable + ']'; debugPrint(debug, sqlStmt); stmt.executeUpdate(sqlStmt); for (int keyIdx = 1;keyIdx < udaKeys.count();keyIdx++) { usKey = udaKeys.extract(keyIdx); debugPrint(debug, usKey.ToString()); if (usKey.length() > 0) { debugPrint(debug, udaKeys.count() + " " + usKey + usKey.length() + " " + keyIdx); sqlStmt = "INSERT [" + Properties.Settings.Default.SqlTable + "] VALUES ('" + usKey + "', 0, 1, '" + usKey + "')"; debugPrint(debug, sqlStmt); stmt.executeUpdate(sqlStmt); udaRow = new UniDynArray(uf.read(usKey)); for (int fldIdx = 1; fldIdx <= udaRow.dcount(); fldIdx++) { //usField = udaRow.extract(fldIdx) ; //udaValues = new UniDynArray(usField); for (int valIdx = 1; valIdx <= udaRow.dcount(fldIdx); valIdx++) { usValue = udaRow.extract(fldIdx, valIdx) ; if (usValue.length() > 0) { //debugPrint(debug, fldIdx + " " + valIdx + " -->" + usValue + "<--"); sqlStmt = "INSERT [" + Properties.Settings.Default.SqlTable+ "] VALUES ('" + usKey + "', " + fldIdx + ", " + valIdx + ", '" + usValue.ToString().replace("'", "''") + "')"; debugPrint(debug, sqlStmt); stmt.executeUpdate(sqlStmt); } } } } //debugPrint(debug, udaKeys.extract(keyIdx)); } */ uf.Close(); debugPrint(debug, Properties.Settings.Default.U2File + " file closed\n"); // did we connect? debugPrint(debug, "U2 Disconnected\n"); //conn.close(); //debugPrint(debug, "SQL Disconnected."); } catch (UniSessionException e) { debugPrint(debug, "Error: " + e); } catch (UniFileException e) { debugPrint(debug, "File Error: " + e); } catch (UniSelectListException e) { // TODO Auto-generated catch block debugPrint(debug, "File Error: " + e); } Console.ReadKey(); }
static void Main(string[] args) { _options = new Options(args); SqlBulkCopy bulkCopy = null; if (_options.Verbose) { Console.WriteLine(_options.ToString()); } try { var srcConn = new U2Conn(); srcConn.Connect(_options.U2Host, _options.U2Login, _options.U2Password, _options.U2Account); var connectString = string.Format("Server={0};User Id={1};Password={2};;Database={3};" , _options.SqlHost // "pmsteel.kwyk.net" , _options.SqlLogin // "pmsteel" , _options.SqlPassword // "H!carb0n" , _options.SqlDatabase // "pmsteel" ); var destConn = new SqlConnection(connectString); destConn.Open(); bulkCopy = new SqlBulkCopy(destConn); if ("" != _options.SqlDictTable) { var srcDictReader = srcConn.GetDictReader(_options.U2File); SqlTableAction(destConn, _options.SqlTableAction, _options.SqlDictTable, "dictionary"); //using (var bulkCopy = new SqlBulkCopy(destConn)) bulkCopy = new SqlBulkCopy(destConn); { bulkCopy.DestinationTableName = _options.SqlDictTable; bulkCopy.BatchSize = 100; bulkCopy.NotifyAfter = 100; bulkCopy.SqlRowsCopied += OnSqlRowsCopied; bulkCopy.WriteToServer(srcDictReader); } Console.WriteLine("Copied {0} dictionary records to {1}", srcDictReader.RecordsAffected, _options.SqlDictTable); } if ("" != _options.SqlTable) { var srcReader = srcConn.GetReader(_options.U2File); srcReader.Limit = _options.Limit; SqlTableAction(destConn, _options.SqlTableAction, _options.SqlTable, _options.SqlTableFormat); // using (bulkCopy = new SqlBulkCopy(destConn)) bulkCopy = new SqlBulkCopy(destConn); { bulkCopy.DestinationTableName = _options.SqlTable; bulkCopy.BatchSize = 100; bulkCopy.NotifyAfter = 100; bulkCopy.SqlRowsCopied += OnSqlRowsCopied; bulkCopy.WriteToServer(srcReader); } Console.WriteLine("Copied {0} data records to {1}", srcReader.RecordsAffected, _options.SqlTable); srcReader.Close(); } srcConn.Disconnect(); } catch (Exception ex) { if (ex.Message.Contains("Received an invalid column length from the bcp client for colid") && bulkCopy != null) { string pattern = @"\d+"; Match match = Regex.Match(ex.Message.ToString(), pattern); var index = Convert.ToInt32(match.Value) - 1; FieldInfo fi = typeof(SqlBulkCopy).GetField("_sortedColumnMappings", BindingFlags.NonPublic | BindingFlags.Instance); var sortedColumns = fi.GetValue(bulkCopy); var items = (Object[])sortedColumns.GetType().GetField("_items", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(sortedColumns); FieldInfo itemdata = items[index].GetType().GetField("_metadata", BindingFlags.NonPublic | BindingFlags.Instance); var metadata = itemdata.GetValue(items[index]); var column = metadata.GetType().GetField("column", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata); var length = metadata.GetType().GetField("length", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata); //throw new DataFormatException(String.Format("Column: {0} contains data with a length greater than: {1}", column, length)); Console.WriteLine(String.Format("Column: {0} contains data with a length greater than: {1}", column, length)); } Console.WriteLine("Error: " + ex); // todo: remove this after debugging? if (_options.Verbose) { Console.Write("\nPress any key to continue"); Console.ReadKey(); } } }