我想以编程方式获取MySQL数据库中表中所有列的属性。具体来说,我正在寻找一列是否可为空,以便可以在用C#/ WPF编写的用户界面中标识所需的项目。

我正在使用MySqlCommandBuilder.DeriveParameters(command)来标识特定存储过程中所需的列。 MySqlCommandBuilder.DeriveParameters is not supportedMySQL does not support making parameters to a stored procedure optional。在DeriveParameters返回的参数列表中,Parameter.IsNullable始终返回false。

这是数据库中的表之一:

-- -----------------------------------------------------
-- Table `pacswlibinvtool`.`authorstab`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `pacswlibinvtool`.`authorstab` ;

CREATE TABLE IF NOT EXISTS `pacswlibinvtool`.`authorstab` (
    `idAuthors` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `LastName` VARCHAR(20) NOT NULL,
    `FirstName` VARCHAR(20) NOT NULL,
    `MiddleName` VARCHAR(20) NULL DEFAULT NULL,
    `YearOfBirth` VARCHAR(4) NULL DEFAULT NULL,
    `YearOfDeath` VARCHAR(4) NULL DEFAULT NULL,
    PRIMARY KEY (`idAuthors`, `LastName`, `FirstName`),
    UNIQUE INDEX `idAuthors_UNIQUE` (`idAuthors` ASC),
    INDEX `LastName` (`LastName` ASC),
    INDEX `LastCMFirst` (`LastName` ASC, `FirstName` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = UTF8MB4;


我希望能够识别在C#应用程序中可以为null的列。

最佳答案

您可以使用标准的INFORMATION_SCHEMA .COLUMNS来探索列的属性

string cmdText = @"SELECT * FROM INFORMATION_SCHEMA.COLUMNS
                   WHERE Table_Name = 'authorstab'";
using(MySqlConnection cnn = GetMySqlConnection())
using(MySqlCommand cmd = new MySqlCommand(cmdText, cnn))
{
    DataTable dt = new DataTable();
    cnn.Open();
    using(MySqlDataReader reader = cmd.ExecuteReader())
        dt.Load(reader);
}


现在,DataTable dt充满了行,该行包含每行有关表每一列的所有信息,还包括一个名为boolean类型的IS_NULLABLE列

10-08 05:06