6 Stimmen

Abrufen der maximalen Länge für eine "String"-Spalte mit LINQ to SQL

Ist es möglich, die maximale Spaltenlänge für einen VARCHAR, CHAR usw. zu erhalten?

1 Stimmen

Möchten Sie die maximal mögliche Länge für die Spalten wissen, z. B. 1000 für varchar(1000) oder die maximale Länge der Werte in dieser Spalte?

4voto

mackenir Punkte 10342

Hier ist ein Weg, der den Kontakt mit der Datenbank vermeidet:

  • Ermitteln Sie mithilfe von Reflection die Eigenschaft der Entitätsklasse, die der betreffenden Spalte entspricht.
  • Rufen Sie dann das Attribut System.Data.Linq.Mapping.Column der Eigenschaft ab.
  • Analysieren Sie dann die DbType-Eigenschaft dieses Attributs (z. B. NVarChar(255) NOT NULL ), um die Spaltenlänge zu erhalten.

1voto

TcKs Punkte 24671

In reinem T-SQL können Sie diese Abfrage verwenden:

select max_length from sys.columns as c inner join sys.objects o on c.object_id = o.object_id where o.name = 'myTable' and c.name = 'myColumn'

Für linq-to-sql müssen Sie es in linq umschreiben.

1voto

ctrlalt3nd Punkte 1302

Hier wird geantwortet:

Linq to SQL - Zugrundeliegende Spaltenlänge

Ich fand es aber schöner, das zu ändern:

public static int GetLengthLimit(Type type, string field) //definition changed so we no longer need the object reference
//Type type = obj.GetType(); //comment this line

Und rufen Sie an:

int i = GetLengthLimit(typeof(Pet), "Name");

Fällt jemandem eine Möglichkeit ein, den Feldbezug stark zu typisieren?

1voto

Keith Barrows Punkte 24064
public static int GetLengthLimit(Model.RIVFeedsEntities ent, string table, string field)
{
    int maxLength = 0;   // default value = we can't determine the length

    // Connect to the meta data...
    MetadataWorkspace mw = ent.MetadataWorkspace;

    // Force a read of the model (just in case)...
    // http://thedatafarm.com/blog/data-access/quick-trick-for-forcing-metadataworkspace-itemcollections-to-load/
    var q = ent.Clients;
    string n = q.ToTraceString();

    // Get the items (tables, views, etc)...
    var items = mw.GetItems<EntityType>(DataSpace.SSpace);
    foreach (var i in items)
    {
        if (i.Name.Equals(table, StringComparison.CurrentCultureIgnoreCase))
        {
            // wrapped in try/catch for other data types that don't have a MaxLength...
            try
            {
                string val = i.Properties[field].TypeUsage.Facets["MaxLength"].Value.ToString();
                int.TryParse(val, out maxLength);
            }
            catch
            {
                maxLength = 0;
            }
            break;
        }
    }

    return maxLength;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X