Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C#] Multiple insert - problem z SqlCommand.Size

Ostatnio zmodyfikowano 2013-09-18 18:33
Autor Wiadomość
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.
P-91161
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?
P-91163
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.
P-91164
DejaVu
» 2013-08-29 09:57:19
P-91165
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.
P-91295
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?
P-91467
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
P-91675
DejaVu
» 2013-09-18 12:45:26
No i co? Doszedłeś do przyczyny problemu? Oglądałeś dane debuggerem?
P-92288
« 1 » 2
  Strona 1 z 2 Następna strona