Laden...

ArgumentException: MaxLength trifft nur auf den Datentyp der Zeichenfolge zu.

Erstellt von Seidenraupe vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.056 Views
S
Seidenraupe Themenstarter:in
2 Beiträge seit 2018
vor 4 Jahren
ArgumentException: MaxLength trifft nur auf den Datentyp der Zeichenfolge zu.

verwendetes Datenbanksystem: MySql

Bei

 mySqlDataAdapter.FillSchema(myDataSet, SchemaType.Source); 

tritt ein mir unbekannter Fehler auf (vollständig siehe ganz unten):

Fehlermeldung:
MaxLength trifft nur auf den Datentyp der Zeichenfolge zu. Die MaxLength-Eigenschaft von Column 'RABATTGR' kann nicht auf eine positive Zahl festgelegt werden.

Dieser bezieht sich auf die Datenbankspalte einer anderen Software (hier die entsprechenden Infos per HeidiSQL ausgelesen):
#: 67
Name: RABATTGR
Datentyp: VARCHAR
Länge/SET: 4
Vorzeichenlos: nein
Erlaube NULL: ja
Zerofill: nein
Standard: NULL
Kollation: latin1_german1_ci

Ein VARCHAR erfordert eine Länge/SET, diese kann nicht entfernt werden.

Ich verwende:
• MS Visual Studio Community 2017 V 15.9.17
• MS .NET Framework 4.8.03752
• MySql.Data erst 8.0.18, jetzt aktuellste stabile Version 8.0.19

Kann mir bitte jemand sagen, mit welchem Vorgehen ich diesen Fehler beheben kann? Ich bin davon ausgegangen, dass die Verwendung des etablierten DataAdapters unproblematisch sei.

Fehlermeldung:
System.ArgumentException
HResult=0x80070057
Nachricht = MaxLength trifft nur auf den Datentyp der Zeichenfolge zu. Die MaxLength-Eigenschaft von Column 'RABATTGR' kann nicht auf eine positive Zahl festgelegt werden.
Quelle = System.Data
Stapelüberwachung:
bei System.Data.DataColumn.set_MaxLength(Int32 value)
bei System.Data.ProviderBase.SchemaMapping.SetupSchemaWithKeyInfo(MissingMappingAction mappingAction, MissingSchemaAction schemaAction, Boolean gettingData, DataColumn parentChapterColumn, Object chapterValue)
bei System.Data.ProviderBase.SchemaMapping..ctor(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, Boolean keyInfo, SchemaType schemaType, String sourceTableName, Boolean gettingData, DataColumn parentChapterColumn, Object parentChapterValue)
bei System.Data.Common.DataAdapter.FillSchemaFromReader(DataSet dataset, DataTable datatable, SchemaType schemaType, String srcTable, IDataReader dataReader)
bei System.Data.Common.DataAdapter.FillSchema(DataSet dataSet, SchemaType schemaType, String srcTable, IDataReader dataReader)
bei System.Data.Common.DbDataAdapter.FillSchemaInternal(DataSet dataset, DataTable datatable, SchemaType schemaType, IDbCommand command, String srcTable, CommandBehavior behavior)
bei System.Data.Common.DbDataAdapter.FillSchema(DataSet dataSet, SchemaType schemaType, IDbCommand command, String srcTable, CommandBehavior behavior)
bei System.Data.Common.DbDataAdapter.FillSchema(DataSet dataSet, SchemaType schemaType)
bei SyncToolAutoSync.DataLayer.WawiData..ctor() in C:\Users\s.schuetz\source\repos\svn_repos\SyncTool\SyncToolAutoSync\DataLayer\WawiData.cs: Zeile179
bei SyncToolAutoSync.LogicLayer.ImportProcess.startImport(RandshopOrdersLogic randshopOrdersLogic, StatusData statusData) in C:\Users\s.schuetz\source\repos\svn_repos\SyncTool\SyncToolAutoSync\LogicLayer\ImportProcess.cs: Zeile41
bei SyncToolAutoSync.LogicLayer.ImportProcess.StartImport(RandshopOrdersLogic randshopOrdersLogic, StatusData statusData) in C:\Users\s.schuetz\source\repos\svn_repos\SyncTool\SyncToolAutoSync\LogicLayer\ImportProcess.cs: Zeile29
bei SyncToolAutoSync.LogicLayer.SyncProcess.startProcess(Object source, ElapsedEventArgs e) in C:\Users\s.schuetz\source\repos\svn_repos\SyncTool\SyncToolAutoSync\LogicLayer\SyncProcess.cs: Zeile59
bei System.Timers.Timer.MyTimerCallback(Object state)

16.834 Beiträge seit 2008
vor 4 Jahren

Leider hast Du eine Exception auf Deutsch - was immer etwas unpraktisch ist; denn die Übersetzungen sind nicht selten ungenau.
Daher ist es auch die allgemeine Empfehlung auf deutsche Exceptions (aus Entwicklersicht) zu verzichten.

Die englische Fehlermeldung lautet> Fehlermeldung:

MaxLength applies to string data type only. You cannot set Column '{0}' property MaxLength to be non-negative number.

Googelt man diese Fehlermeldung, findet man folgenden Treffer: MaxLength of column seems to be always -1 for the string fields in the datatable C# mit einer entsprechenden Lösung.

First you need to add your DataTable to the DataSet to make it work after you created the DataTable because they are not connected in your example and filling the DataSource has no impact on the DataTable created in the next line so that you can use the additional schema information:

dsInvoice.Tables.Add(dtInvoiceNos);  

then you need to call the SqlDataAdapter.FillSchema Method on your SqlDataAdapter to get more information from your database then just the data when using only the Fill method

da.FillSchema(dtInvoiceNos, SchemaType.Source);  
da.Fill(dsInvoice);  
The fill operations must be called after you added the table to the dataset.  

Tipp: weg mit deutschem Sprachpaket.
Stört mehr als dass es hilft.