如何检查指定的列是否允许空值?
我正在使用以下代码来打印所有列,但是我也想打印该列是否允许空值:
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));
}
}
}