malan Temat założony przez niniejszego użytkownika |
[C#] Multiple insert - problem z SqlCommand.Size » 2013-08-29 08:52:23 Witam, próbując przepisać dane z jeden tabeli do drugiej trafiłem na następujący problem: SqlCommand command = new SqlCommand("INSERT INTO test(@testValue1, @testValue2)", connection); SqlParameter testValue1 = new SqlParameter("@testValue1", SqlDbType.Int); SqlParameter testValue2 = new SqlParameter("@testValue2", SqlDbType.VarChar, 36);
command.Parameters.Add(testValue1); command.Parameters.Add(testValue2); command.Prepare();
SqlCommand command2 = new SqlCommand("SELECT FROM (...)", connection); SqlDataReader reader = command2.ExecuteReader(); while(reader.Read()) { command.Parameters[0].Value = reader[0].ToString(); command.Parameters[1].Value = reader[1].ToString(); command.Parameters[1].Size = reader[1].ToString().Length; command.ExecuteReader(); }
W tabeli test, w drugiej kolumnie wartości mają... 1 znak - tak jakby zostały ucięte. Problem rozwiązuje wyrzucenie z pętli command.Parameters[1].Size = reader[1].ToString().Length; , ale nie mogę dość dlaczego. Pozdrawiam. |
|
DejaVu |
» 2013-08-29 09:25:56 ... = new SqlCommand("INSERT INTO test(kolumna1,kolumna2) VALUES(@testValue1, @testValue2)", connection);
Czy zapytanie nie powinno wyglądać przypadkiem tak? |
|
malan Temat założony przez niniejszego użytkownika |
» 2013-08-29 09:28:17 Niekoniecznie, ale tak wygląda w "oryginale". To co podałem to tylko taki pseudokod. |
|
DejaVu |
» 2013-08-29 09:57:19 |
|
malan Temat założony przez niniejszego użytkownika |
» 2013-08-30 22:32:24 To są dwie różne bazy, ba, dwa różne serwery. Według MSDN SqlParameter.Size to: The maximum size, in bytes, of the data within the column. The default value is inferred from the parameter value. |
Powołując się na to - (teoretycznie) ustawienie tej wartości przed pętlą powinno wystarczyć, bo (teoretycznie) żadna wartość pobierana z drugiej bazy nie powinna zajmować więcej miejsca. Teoretycznie więc, błędem jest ustawianie SqlParameter.Size w pętli, dla każdej wartości osobno. Niestety to tylko moje wnioski. |
|
DejaVu |
» 2013-09-03 10:26:25 The maximum size, in bytes, (...) |
To, że długość stringa wyniesie 5 znaków nie oznacza wcale, że zajmuje on 5-bajtów. Może tu jest problem? |
|
malan Temat założony przez niniejszego użytkownika |
» 2013-09-08 00:25:59 Też się nad tym zastanawiałem, ale sam Microsoft podaje taki przykład: static void CreateSqlParameterSize() { string description = "12 foot scarf - multiple colors, one previous owner"; SqlParameter parameter = new SqlParameter("Description", SqlDbType.VarChar); parameter.Direction = ParameterDirection.InputOutput; parameter.Size = description.Length; parameter.Value = description; } Źródło: http://msdn.microsoft.com/pl-pl/library/system.data.sqlclient.sqlparameter.size.aspx |
|
DejaVu |
» 2013-09-18 12:45:26 No i co? Doszedłeś do przyczyny problemu? Oglądałeś dane debuggerem? |
|
« 1 » 2 |