我想以编程方式获取MySQL数据库中表中所有列的属性。具体来说,我正在寻找一列是否可为空,以便可以在用C#/ WPF编写的用户界面中标识所需的项目。
我正在使用MySqlCommandBuilder.DeriveParameters(command)来标识特定存储过程中所需的列。 MySqlCommandBuilder.DeriveParameters is not supported和MySQL 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列