كيف يمكنني تحديد نوع العمود الذي يمثله الهيكل MySqlDateTime على الخلية صافي موصل ل؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

وDataColumn.DataType يعود FULLNAME = "MySql.Data.Types.MySqlDateTime" بغض النظر عن نوع من العمود أنها تمثل، إذا كان إما التاريخ، الوقت، أو DATETIME.

ومن الواضح يمكنني الاستعلام عن الجدول information_schema.columns، على الرغم من وأنا على أمل أن مخازن مكتبة موصل هذه التفاصيل في مكان ما أنا فقط لا يمكن أن تجد في الوثائق.

هل كانت مفيدة؟

المحلول

ومن نظرة سريعة على شفرة المصدر MySQLClient، وأعتقد أن أفضل خيار هو IDataReader.GetDataTypeName (). هذا هو اسم DBMS الأساسية لنوع بيانات عمود. ل(كمية محدودة من) مزيد من المعلومات، راجع MSDN مستندات وفي المقابلة الخلية مستندات للحصول على هذه الخاصية.

وهنا مصدر من MySqlDateTime.cs لهذا العقار، والتي تبدو واعدة:

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

وهنا وظيفة أداة مساعدة أخرى قد ترغب في استعارة مدونة، من MetaData.cs:

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");
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top