| FAQ | 
| Kalender | 
|  2015-03-30, 13:29 | #1 | ||
| 
 | |||
| Mycket flitig postare | 
			
			Hej, Jag håller på att göra en bulk insert med ca 50,000 poster. Kodsnutten för insert ser ut på detta vis. Kod: string strSql = "INSERT INTO wc_list (id, name, company, orgNo, address, postalCode, city, phoneNo, carrier, status, projectId) VALUES(id, @A, @B, @C, @D, @E, @F, @G, @H, @I, @J)";
        string strConnectionString = ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString;
        MySqlConnection sqlConn = new MySqlConnection(strConnectionString);
        MySqlCommand cmd = new MySqlCommand(strSql, sqlConn);
        sqlConn.Open();
        foreach (DataRow r in dt.Rows)
        {
            cmd1 = sqlConn.CreateCommand();
            cmd.CommandText = strSql;
            cmd.Parameters.AddWithValue("@A", r[0]);
            cmd.Parameters.AddWithValue("@B", r[1]);
            cmd.Parameters.AddWithValue("@C", r[2]);
            cmd.Parameters.AddWithValue("@D", r[3]);
            cmd.Parameters.AddWithValue("@E", r[4]);
            cmd.Parameters.AddWithValue("@F", r[5]);
            cmd.Parameters.AddWithValue("@G", r[6]);
            cmd.Parameters.AddWithValue("@H", r[7]);
            cmd.Parameters.AddWithValue("@I", "0");
            cmd.Parameters.AddWithValue("@J", iProjectId);
            
            cmd.ExecuteNonQuery();
        }
        sqlConn.Close();Just nu gör jag så att jag klickar på "INSERT-knappen" och sedan trycker jag direkt på ESC. Då kan jag surfa runt på sidan medans inserten håller på. hur kan jag åstadkomma samma effekt programmatiskt? håller på att utveckla i c# .NET tacksam för svar. | ||
|   |  Svara med citat | 
|  2015-03-30, 13:52 | #2 | |||
| 
 | ||||
| Bara ett inlägg till! | 
			
			Det beror på. En sätt är att lägga arbetet i en tråd och sedan hämta tillbaka status med SignlarR. Om det är Azure du utvecklar i så har du ju möjlighet att lägga dina arbeten i en kö som du sedan betar av med en worker-roll.
		 | |||
|   |  Svara med citat | 
|  2015-03-30, 17:10 | #3 | |||
| 
 | ||||
| Mycket flitig postare | 
			
			Kör alla inserts i en och samma query. Dvs INSERT INTO table (, , ,) VALUES (val1,val2), (val3, val4) etc. Tror max ligger på 500 i en och samma query, detta går att ändra men annars kan du bara köra olika batchar om 500 åt gången. | |||
|   |  Svara med citat | 
|  2015-03-30, 17:30 | #4 | ||
| 
 | |||
| Nykomling | 
			
			Som ovan säger, kör i batchar. Istället för att köra 50.000 frågor mot databasen blir det bara 100 vilket inte bör ta många sekunder att köra. | ||
|   |  Svara med citat | 
|  2015-03-30, 17:33 | #5 | |||
| 
 | ||||
| Mycket flitig postare | 
			
			Såg nu att det rörde sig om 50k poster. Ändra max_allowed_packet och sätt in 10.000 om gången, bör gå kvickt    | |||
|   |  Svara med citat | 
|  2015-03-30, 20:25 | #6 | ||
| 
 | |||
| Flitig postare | 
			
			Jag hade använt mig av en insert med en select: INSERT INTO users (username, password, firstname, lastname) SELECT username, salted_password, firstname, lastname FROM registered_users Gjort detta enkelt med över 600 tusen poster. Lycka till! | ||
|   |  Svara med citat | 
|  2015-04-08, 12:50 | #7 | ||
| 
 | |||
| Mycket flitig postare | 
			
			tack för alla som försökt hjälpa, testade alla dessa ovan, med det tog alltför långt tid att göra en insert... ca 60 sek... :S Lyckades dock lösa problemet med denna kod, för er som är intresserade. Jag skapar en tillfällig csv fil och därefter gör jag en batch-insert från filen tilkl databasen. Kod:         string strConnectionString = ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString;
        using (var conn = new MySqlConnection(strConnectionString))
        {
            var bl = new MySqlBulkLoader(conn)
            {
                TableName = "wc_list",
                FieldTerminator = "|",
                LineTerminator = "\r\n",
                FileName = getCSVfile(),
                NumberOfLinesToSkip = 0,
                Columns = { "name", "company", "orgNo", "address", "postalCode", "city", "phoneNo", "carrier", "status", "projectId", "other" }
            };
            var numberOfInsertedRows = bl.Load();
        } | ||
|   |  Svara med citat | 
| Svara | 
| 
 | 
 |