如何检查SQL模式是否允许列为NULL?

时间:2014-06-30 14:32:42

标签: c# sql sql-server schema

您好我有以下代码列出了给定SQL表的所有列名:

public static DataTable GetSQLTableSchema(string _connectionString,string _tableName) 
        {
            string connectionString = _connectionString;
            string tableName = _tableName.Trim();
            DataTable schemaTable = new DataTable();
            SqlDataReader sqlDataReader; 


            try {

                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    string queryString = "SELECT * FROM " + tableName;

                    using(SqlCommand queryCMD = new SqlCommand(queryString))
                    {
                        queryCMD.Connection = connection;
                        connection.Open();
                        sqlDataReader = queryCMD.ExecuteReader(CommandBehavior.KeyInfo);
                        schemaTable = sqlDataReader.GetSchemaTable();
                        connection.Close();  
                    }

                }

            }catch(Exception ex)
            {
                Console.WriteLine(ex);                
            }

            #region Print Table Schema

            foreach(DataRow field in schemaTable.Rows)
            {
                foreach(DataColumn property in schemaTable.Columns)
                {
                    Console.WriteLine("{0} - {1}",field[0],//HERE!); 
                }
            }            

            #endregion

            return schemaTable;

        }

在我标记的行( HERE!)中,我想打印列的名称和布尔值是否为allow NULL。但我从场上获得的只是itemarray[]。我确信数组包含的值之一显示allow NULL值。我无法弄清楚它是哪一个。此外,我认为必须有一个更优雅的方式。

3 个答案:

答案 0 :(得分:1)

DataColumn具有AllowDBNull属性。

http://msdn.microsoft.com/en-gb/library/system.data.datacolumn.allowdbnull(v=vs.100).aspx

假设有问题的ODBC驱动程序正确地返回Schema表,这应该可以满足您的需求。

答案 1 :(得分:1)

你可以这样做:

Console.WriteLine(property.ColumnName +" = "+ field[property].ToString());

AllowDBNull Reference

  

获取或设置一个值,该值指示此列中是否允许属于该表的行使用空值。

答案 2 :(得分:0)

SELECT column_name, is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ?