Wie kann ich den Spaltentyp von einem mySQL .Net Connector MySqlDateTime Struktur dargestellt bestimmen?

StackOverflow https://stackoverflow.com/questions/1230203

  •  22-07-2019
  •  | 
  •  

Frage

DataColumn.DataType kehrt Fullname = „MySql.Data.Types.MySqlDateTime“ unabhängig von der Art der Spalte es darstellt, wenn es entweder DATE, TIME oder DATETIME-.

Klar kann ich die information_schema.columns Tabelle abfragen, obwohl ich, dass die Connector-Bibliothek speichert die Hoffnung bin dieses Detail irgendwo, dass ich einfach nicht in der Dokumentation finden.

War es hilfreich?

Lösung

Von einem kurzen Blick auf die mysqlclient Quellcode, ich denke, die beste Wahl IDataReader.GetDataTypeName ist (). Dies ist der Name des zugrunde liegenden DBMS für den Datentyp einer Spalte. Für (eine begrenzte Anzahl von) weitere Informationen finden Sie in der docs und die entsprechende MySQL-Dokumentation für diese Eigenschaft .

Hier ist die Quelle, aus MySqlDateTime.cs für diese Eigenschaft, die vielversprechend aussieht:

string IMySqlValue.MySqlTypeName
{
 get
 {
  switch (type)
  {
   case MySqlDbType.Date: return "DATE";
   case MySqlDbType.Newdate: return "NEWDATE";
   case MySqlDbType.Timestamp: return "TIMESTAMP";
  }
  return "DATETIME";
 }
}

Hier ist eine andere Utility-Funktion sollten Sie den Code, von MetaData.cs leihen:

public static MySqlDbType NameToType(string typeName, bool unsigned,
  bool realAsFloat, MySqlConnection connection)
{
 switch (typeName.ToUpper(CultureInfo.InvariantCulture))
 {
  case "CHAR": return MySqlDbType.String;
  case "VARCHAR": return MySqlDbType.VarChar;
  case "DATE": return MySqlDbType.Date;
  case "DATETIME": return MySqlDbType.DateTime;
  case "NUMERIC":
  case "DECIMAL":
  case "DEC":
  case "FIXED":
   if (connection.driver.Version.isAtLeast(5, 0, 3))
    return MySqlDbType.NewDecimal;
   else
    return MySqlDbType.Decimal;
  case "YEAR":
   return MySqlDbType.Year;
  case "TIME":
   return MySqlDbType.Time;
  case "TIMESTAMP":
   return MySqlDbType.Timestamp;
  case "SET": return MySqlDbType.Set;
  case "ENUM": return MySqlDbType.Enum;
  case "BIT": return MySqlDbType.Bit;

  case "TINYINT":
            return unsigned ? MySqlDbType.UByte : MySqlDbType.Byte;
  case "BOOL":
  case "BOOLEAN":
   return MySqlDbType.Byte;
  case "SMALLINT":
   return unsigned ? MySqlDbType.UInt16 : MySqlDbType.Int16;
  case "MEDIUMINT":
   return unsigned ? MySqlDbType.UInt24 : MySqlDbType.Int24;
  case "INT":
  case "INTEGER":
   return unsigned ? MySqlDbType.UInt32 : MySqlDbType.Int32;
  case "SERIAL":
   return MySqlDbType.UInt64;
  case "BIGINT":
   return unsigned ? MySqlDbType.UInt64 : MySqlDbType.Int64;
  case "FLOAT": return MySqlDbType.Float;
  case "DOUBLE": return MySqlDbType.Double;
  case "REAL": return
    realAsFloat ? MySqlDbType.Float : MySqlDbType.Double;
        case "TEXT":
            return MySqlDbType.Text;
        case "BLOB":
   return MySqlDbType.Blob;
  case "LONGBLOB":
            return MySqlDbType.LongBlob;
        case "LONGTEXT":
            return MySqlDbType.LongText;
  case "MEDIUMBLOB":
            return MySqlDbType.MediumBlob;
        case "MEDIUMTEXT":
            return MySqlDbType.MediumText;
  case "TINYBLOB":
            return MySqlDbType.TinyBlob;
  case "TINYTEXT":
   return MySqlDbType.TinyText;
        case "BINARY":
            return MySqlDbType.Binary;
        case "VARBINARY":
            return MySqlDbType.VarBinary;
 }
 throw new MySqlException("Unhandled type encountered");
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top