2016-10-20 3 views
0

Ich habe ein Problem mit einer Select-Anweisung. Es funktioniert in SQL Server, aber es yels den Fehler in Titel, wenn in C# verwendetZeichenfolge oder Binärdaten werden abgeschnitten. auf SqlDataReader

SO sieht My SQL-Anweisung wie folgt

declare @312341v1Whenaddakeylength128charatsendingreportonP varchar(max)= 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec faucibus nulla ut lorem ornare, sit amet ullamcorper diam laoreet. Proin convallis est ut euismod rhoncus. Donec in magna eleifend, dictum neque non, pellentesque diam. Aliquam faucibus fringilla ex, vitae posuere lectus rhoncus congue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam mollis vel enim at consequat. Integer porta feugiat sem, a condimentum felis hendrerit ac. Quisque lobortis placerat sodales. Nam et nunc nulla. 

Pellentesque vel risus vel sem pellentesque feugiat. Ut sodales odio sollicitudin, consequat nisi quis, lobortis ex. Donec fermentum ante massa, luctus auctor sapien consectetur ac. Phasellus auctor nunc lorem, ultricies sollicitudin metus placerat ut. Proin non viverra erat. Maecenas malesuada orci mi. Curabitur vel dolor a ex ultrices posuere. Sed id quam porta lorem venenatis auctor sed a dolor. Suspendisse lobortis mauris blandit lacinia semper. Nunc nisl orci, porta nec maximus id, imperdiet vitae purus. Aenean a elit id augue suscipit pretium vel nec risus. Suspendisse potenti. Pellentesque facilisis mauris eu orci sagittis semper. Suspendisse at placerat mauris. 

Sed vulputate est quis justo mattis convallis. Aenean tempor auctor arcu eget suscipit. Maecenas ac vehicula neque, ut placerat lorem. Integer felis lectus, varius sit amet neque auctor, ultrices interdum mauris. Ut fringilla, sapien id auctor blandit, enim diam tempus neque, eu tempus libero nibh a purus. Maecenas bibendum ligula ut malesuada placerat. Morbi egestas commodo velit eu egestas. Phasellus sed iaculis justo. Sed ipsum nisl, molestie ac luctus sit amet, fringilla luctus felis. Nullam vitae lorem in metus blandit maximus. 

Nunc hendrerit odio quis felis mattis bibendum sed ut neque. Praesent blandit nunc in elit semper feugiat a a mi. Pellentesque a cursus nisi. Etiam maximus tristique elementum. Praesent finibus blandit sagittis. Morbi mollis leo justo, ut malesuada mauris ullamcorper sit amet. Ut eu bibendum justo. Integer tempus elit erat, non egestas urna tristique in. Quisque et massa nec felis rutrum posuere ut vitae sapien. Ut semper euismod mauris ac blandit. Vivamus dignissim est sit amet maximus volutpat. Cras fermentum massa nunc, non tincidunt erat rutrum vitae. 

Ut commodo ullamcorper erat, eget sollicitudin nisl lacinia sed. Phasellus fermentum felis ac urna elementum, et bibendum nunc sagittis. Curabitur vestibulum tristique ante ut consequat. Pellentesque egestas ex sit amet mauris ultrices, malesuada bibendum est finibus. Curabitur ac feugiat arcu. Nam auctor pulvinar molestie. Quisque feugiat, nulla non rhoncus blandit, orci leo interdum eros, in imperdiet libero ante nec mauris. Morbi id aliquam purus, quis posuere magna. Nunc vel sem eget ante rhoncus imperdiet eu et leo. 

Quisque ac malesuada est. Maecenas a dolor vitae turpis ultricies vestibulum. Quisque tincidunt lorem volutpat, eleifend nulla vel, dictum lorem. Nullam id imperdiet nunc, posuere hendrerit nulla. In volutpat, augue ut posuere ultricies, lectus sapien condimentum lectus, in consequat nibh nisi quis dolor. Cras rhoncus mi pellentesque massa dignissim convallis. Vivamus eu eleifend felis, vel eleifend dui. Etiam vitae sapien nunc. Integer est quam, sodales quis dolor vel, commodo sodales urna. Sed ac sapien ligula. Cras tempor felis vitae justo ullamcorper, ut venenatis risus commodo. Fusce lobortis egestas commodo. 

Sed at libero quis mauris ultricies aliquam vel feugiat lorem. Donec pharetra vitae libero id placerat. Aliquam suscipit porta urna, a hendrerit mauris ullamcorper sit amet. Phasellus mollis diam sagittis metus dapibus, ac porta tortor euismod. Nam quam lacus, dignissim quis feugiat ut, rhoncus sit amet augue. Vestibulum molestie egestas venenatis. Ut a nulla in augue pretium tincidunt quis eget ex. Phasellus blandit bibendum neque. Sed laoreet ullamcorper justo. Morbi non sodales justo. Integer dignissim varius tincidunt. Nulla sagittis, sem ut tempor porta, lorem leo elementum sapien, sed sollicitudin diam nisl sed massa. Etiam egestas mauris nec bibendum pulvinar. Etiam sed nisl cursus, luctus augue non, pharetra enim. Suspendisse ac magna nisl. Mauris tempus eu mauris malesuada consectetur. 

Duis tincidunt vitae diam et mattis. Donec laoreet euismod aliquam. Donec at efficitur sapien, vel lacinia ante. Proin vehicula ut quam vitae faucibus. Nam venenatis est sit amet tortor varius, quis sollicitudin lectus placerat. Donec vel aliquet tellus. Integer pellentesque leo sit amet lorem luctus, eu tempor nisl tincidunt. 

Suspendisse turpis felis, euismod at auctor vel, hendrerit auctor sapien. Mauris finibus interdum vestibulum. Donec quis dolor ac orci commodo efficitur. Nullam in porttitor ipsum, a commodo mauris. Proin et blandit erat. Mauris posuere lacus non leo pulvinar, dignissim aliquam augue vulputate. Nullam et consequat augue, ac ultricies nibh. 

Morbi vestibulum, orci eu molestie convallis, ligula felis convallis lectus, in congue tellus augue et purus. Nulla non dui urna. Aliquam at mattis mauris. Phasellus eget congue urna. Phasellus sollicitudin tellus leo, vel efficitur magna condimentum nec. Donec venenatis feugiat blandit. Quisque erat elit, feugiat nec orci volutpat, semper maximus turpis. Nulla rutrum molestie dolor sed varius. Morbi scelerisque quam dui, ac blandit leo rutrum nec. Vivamus vel maximus orci, at malesuada purus. Cras gravida vulputate augue, sit amet dictum erat aliquet cursus. Ut purus nibh, aliquam vel tincidunt a, vehicula sit amet nulla. Suspendisse ultrices, tortor eget tristique rhoncus, mi elit feugiat ante, ut elementum lacus quam a dolor. Vestibulum nibh justo, dapibus vitae massa vel, pellentesque iaculis tellus. 

Fusce eu volutpat leo. Nunc luctus quis lorem nec mattis. Pellentesque eget sagittis sem. Curabitur mattis ligula ut iaculis accumsan. Aliquam ut enim ac magna hendrerit porttitor. In nec lorem non neque euismod luctus. Praesent euismod purus nec leo egestas lobortis. 

Nunc eros ipsum, tincidunt a purus at, maximus lobortis ipsum. Sed condimentum, turpis non commodo ornare, ligula purus gravida sapien, in interdum elit risus sit amet nibh. Curabitur mattis cursus ligula. In ut lectus et massa iaculis dignissim. Interdum et malesuada fames ac sed.' 


    SELECT * , CASE WHEN Column1 LIKE '%' + @312341v1Whenaddakeylength128charatsendingreportonP+ '%' 
    THEN 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec faucibus nulla ut lorem ornare, sit amet ullamcorper diam laoreet. Proin convallis est ut euismod rhoncus. Donec in magna eleifend, dictum neque non, pellentesque diam. Aliquam faucibus fringilla ex, vitae posuere lectus rhoncus congue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam mollis vel enim at consequat. Integer porta feugiat sem, a condimentum felis hendrerit ac. Quisque lobortis placerat sodales. Nam et nunc nulla. 

Pellentesque vel risus vel sem pellentesque feugiat. Ut sodales odio sollicitudin, consequat nisi quis, lobortis ex. Donec fermentum ante massa, luctus auctor sapien consectetur ac. Phasellus auctor nunc lorem, ultricies sollicitudin metus placerat ut. Proin non viverra erat. Maecenas malesuada orci mi. Curabitur vel dolor a ex ultrices posuere. Sed id quam porta lorem venenatis auctor sed a dolor. Suspendisse lobortis mauris blandit lacinia semper. Nunc nisl orci, porta nec maximus id, imperdiet vitae purus. Aenean a elit id augue suscipit pretium vel nec risus. Suspendisse potenti. Pellentesque facilisis mauris eu orci sagittis semper. Suspendisse at placerat mauris. 

Sed vulputate est quis justo mattis convallis. Aenean tempor auctor arcu eget suscipit. Maecenas ac vehicula neque, ut placerat lorem. Integer felis lectus, varius sit amet neque auctor, ultrices interdum mauris. Ut fringilla, sapien id auctor blandit, enim diam tempus neque, eu tempus libero nibh a purus. Maecenas bibendum ligula ut malesuada placerat. Morbi egestas commodo velit eu egestas. Phasellus sed iaculis justo. Sed ipsum nisl, molestie ac luctus sit amet, fringilla luctus felis. Nullam vitae lorem in metus blandit maximus. 

Nunc hendrerit odio quis felis mattis bibendum sed ut neque. Praesent blandit nunc in elit semper feugiat a a mi. Pellentesque a cursus nisi. Etiam maximus tristique elementum. Praesent finibus blandit sagittis. Morbi mollis leo justo, ut malesuada mauris ullamcorper sit amet. Ut eu bibendum justo. Integer tempus elit erat, non egestas urna tristique in. Quisque et massa nec felis rutrum posuere ut vitae sapien. Ut semper euismod mauris ac blandit. Vivamus dignissim est sit amet maximus volutpat. Cras fermentum massa nunc, non tincidunt erat rutrum vitae. 

Ut commodo ullamcorper erat, eget sollicitudin nisl lacinia sed. Phasellus fermentum felis ac urna elementum, et bibendum nunc sagittis. Curabitur vestibulum tristique ante ut consequat. Pellentesque egestas ex sit amet mauris ultrices, malesuada bibendum est finibus. Curabitur ac feugiat arcu. Nam auctor pulvinar molestie. Quisque feugiat, nulla non rhoncus blandit, orci leo interdum eros, in imperdiet libero ante nec mauris. Morbi id aliquam purus, quis posuere magna. Nunc vel sem eget ante rhoncus imperdiet eu et leo. 

Quisque ac malesuada est. Maecenas a dolor vitae turpis ultricies vestibulum. Quisque tincidunt lorem volutpat, eleifend nulla vel, dictum lorem. Nullam id imperdiet nunc, posuere hendrerit nulla. In volutpat, augue ut posuere ultricies, lectus sapien condimentum lectus, in consequat nibh nisi quis dolor. Cras rhoncus mi pellentesque massa dignissim convallis. Vivamus eu eleifend felis, vel eleifend dui. Etiam vitae sapien nunc. Integer est quam, sodales quis dolor vel, commodo sodales urna. Sed ac sapien ligula. Cras tempor felis vitae justo ullamcorper, ut venenatis risus commodo. Fusce lobortis egestas commodo. 

Sed at libero quis mauris ultricies aliquam vel feugiat lorem. Donec pharetra vitae libero id placerat. Aliquam suscipit porta urna, a hendrerit mauris ullamcorper sit amet. Phasellus mollis diam sagittis metus dapibus, ac porta tortor euismod. Nam quam lacus, dignissim quis feugiat ut, rhoncus sit amet augue. Vestibulum molestie egestas venenatis. Ut a nulla in augue pretium tincidunt quis eget ex. Phasellus blandit bibendum neque. Sed laoreet ullamcorper justo. Morbi non sodales justo. Integer dignissim varius tincidunt. Nulla sagittis, sem ut tempor porta, lorem leo elementum sapien, sed sollicitudin diam nisl sed massa. Etiam egestas mauris nec bibendum pulvinar. Etiam sed nisl cursus, luctus augue non, pharetra enim. Suspendisse ac magna nisl. Mauris tempus eu mauris malesuada consectetur. 

Duis tincidunt vitae diam et mattis. Donec laoreet euismod aliquam. Donec at efficitur sapien, vel lacinia ante. Proin vehicula ut quam vitae faucibus. Nam venenatis est sit amet tortor varius, quis sollicitudin lectus placerat. Donec vel aliquet tellus. Integer pellentesque leo sit amet lorem luctus, eu tempor nisl tincidunt. 

Suspendisse turpis felis, euismod at auctor vel, hendrerit auctor sapien. Mauris finibus interdum vestibulum. Donec quis dolor ac orci commodo efficitur. Nullam in porttitor ipsum, a commodo mauris. Proin et blandit erat. Mauris posuere lacus non leo pulvinar, dignissim aliquam augue vulputate. Nullam et consequat augue, ac ultricies nibh. 

Morbi vestibulum, orci eu molestie convallis, ligula felis convallis lectus, in congue tellus augue et purus. Nulla non dui urna. Aliquam at mattis mauris. Phasellus eget congue urna. Phasellus sollicitudin tellus leo, vel efficitur magna condimentum nec. Donec venenatis feugiat blandit. Quisque erat elit, feugiat nec orci volutpat, semper maximus turpis. Nulla rutrum molestie dolor sed varius. Morbi scelerisque quam dui, ac blandit leo rutrum nec. Vivamus vel maximus orci, at malesuada purus. Cras gravida vulputate augue, sit amet dictum erat aliquet cursus. Ut purus nibh, aliquam vel tincidunt a, vehicula sit amet nulla. Suspendisse ultrices, tortor eget tristique rhoncus, mi elit feugiat ante, ut elementum lacus quam a dolor. Vestibulum nibh justo, dapibus vitae massa vel, pellentesque iaculis tellus. 

Fusce eu volutpat leo. Nunc luctus quis lorem nec mattis. Pellentesque eget sagittis sem. Curabitur mattis ligula ut iaculis accumsan. Aliquam ut enim ac magna hendrerit porttitor. In nec lorem non neque euismod luctus. Praesent euismod purus nec leo egestas lobortis. 

Nunc eros ipsum, tincidunt a purus at, maximus lobortis ipsum. Sed condimentum, turpis non commodo ornare, ligula purus gravida sapien, in interdum elit risus sit amet nibh. Curabitur mattis cursus ligula. In ut lectus et massa iaculis dignissim. Interdum et malesuada fames ac sed.' 
    END as ErrorCode FROM Table rpmsp WHERE Column1 LIKE '%' + @312341v1Whenaddakeylength128charatsendingreportonP+ '%' 

Also diese Anweisung in SQL gut funktioniert es 0 Zeilen zurück, aber nicht werfen Ausnahme.

in C#

SqlDataReader dataReader = sqlCommand.ExecuteReader(); 
      try{ dataReader.Read(); } 
      catch (Exception ex) { 
       var x = 1; 
      } 

dies eine Ausnahme auf der Leitung dataReader.Read wirft(); die Ausnahme ist String or binary data would be truncated. Ich habe keine Ahnung warum, weil ich keine Inserts, es ist nur eine dynamische Auswahl.

Irgendwelche Ideen?

+0

es ist wegen des langen String zurückgegeben? Könnten Sie die lange Zeichenfolge in SELECT explizit in nvarchar (max) umwandeln? Geht das Problem weg, wenn Sie die zurückgegebene Zeichenfolge drastisch verkürzen? (als ein Experiment) – Cato

+0

Gibt es irgendeinen anderen Code? Genauer gesagt, nimmt 'sqlCommand' Parameter? Konnte "@ 312341v1WenndreiLeistung128charatsendender Berichtauf P" ein Parameter sein? Und wenn ja, um welche Länge handelt es sich? –

+0

@AndrewDeighton ja es ist es funktioniert für 3000 Zeichen es wirft Ausnahme bei über 3500 von dem, was ich getestet habe. – CiucaS

Antwort

1

Wir haben einen Prozess erstellt, der einige unserer Tabellen auf einen externen DB Server exportiert. Wir verwenden Ansichten, die Daten im XML-Format zurückgeben.

select col1, col2, col3 from table for xml auto 

ich erkennen, dass in C#, (wir verwenden, um eine gespeicherte Prozedur und .ExecuteNonQuery()), es gibt mehr als eine Zeile für jede einzelne XML-Datei, denke ich, dass es 2K-Pakete verwendet.

Dann, sequentiell alle Zeilen lesen und einen StringBuilder verwenden, den Text erneut erstellen.

StringBuilder xml_text = new StringBuilder(); 
foreach(DataRow row in table.Rows) 
{ 
    xml_text.Append(row[0].ToString()); 
} 
+0

mcNets ty, könnte dies eine gute Lösung sein, falls Sie lange Zeichenfolge benötigen. Für mich war es ein Testfall, der versagte und nicht sicher war, was das scheitert. – CiucaS

1

Dies ist kein C# Problem. Es ist ein SQL, wie Sie an der Fehlermeldung erkennen können. Das Grundproblem ist, dass der SQL Server den Datentyp/die Größe der Zeichenfolge nicht konsistent darstellt.

explizites Casting in der SQL-In für alle Strings varchar (max)

+0

dachte ich auch, aber die Abfrage funktioniert in SQL. Wie auch immer, ich habe die Anzahl der Zeichen auf weniger als 3000 begrenzt und es ist ok. Ich war gerade kurios, warum ich diesen Fehler für eine gültige SQL-Abfrage erhalte, aber ich denke, dass es etwas damit zu tun hat, wie C# SQL Queries verarbeitet. – CiucaS

+0

@CiucaS Nein, das ist ein Fehler von SQL Server. 100%. Es ist nicht garantiert, dass Abfragen identische Ausführungspläne generieren oder sich genau so verhalten, wenn sie nicht explizit angewiesen werden. – UnhandledExcepSean

Verwandte Themen