如何检查指定的列是否允许空值?

我正在使用以下代码来打印所有列,但是我也想打印该列是否允许空值:

cnn = new SqlConnection(connetionString);
cnn.Open();

SqlCommand myCommand = new SqlCommand("select * from " + tableName, cnn);
SqlDataAdapter da = new SqlDataAdapter(myCommand);
DataSet ds = new DataSet();

da.Fill(ds, tableName);

foreach (DataColumn dc in ds.Tables[0].Columns)
{
     // Print stuff here, dc.ColumnName is the column name
}


获取预定义表时,DataColumn.allowDBnull属性似乎不起作用,即使在不允许空值的列中,该属性始终设置为true。

谢谢你的时间!

最佳答案

如果您只想查看列数据,那么我将从系统视图中执行此操作,而不是依赖数据适配器。例如

DECLARE @TableName VARCHAR(50) = 'dbo.TableName'

SELECT  Name, Column_ID, Is_Nullable
FROM    SYS.COLUMNS
WHERE   [Object_ID] = OBJECT_ID(@TableName)


这也意味着您可以正确使用参数化查询,并避免SQL Injection的风险。因此,您的最终代码将如下所示:

using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand("SELECT Name, Is_Nullable FROM sys.columns WHERE [Object_ID] = OBJECT_ID(@TableName)", connection))
{
    connection.Open();
    command.Parameters.Add("@TableName", SqlDbType.VarChar).Value = tableName;
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine("Name: {0}; Allows Null: {1}", reader.GetString(0), reader.GetBoolean(1));
        }
    }
}

09-04 06:21