【问题标题】:How to check if SQL schema allows NULL for a column?如何检查 SQL 模式是否允许列为 NULL?
【发布时间】:2014-08-20 23:14:09
【问题描述】:

您好,我有以下代码列出了给定 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 值。我不知道它是哪一个。另外我觉得一定有更优雅的方式。

【问题讨论】:

    标签: c# sql sql-server schema


    【解决方案1】:

    你可以这样做:

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

    AllowDBNull Reference:

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

    【讨论】:

    • 我的 SQL 表中的第一列是 ID,它不允许为 NULL。使用您的解决方案时,控制台会为表中的每一列打印 ID - true!
    • 所以我找到了我正在寻找的解决方案,它看起来如下: Console.WriteLine(property.ColumnName +" = "+ field[property].ToString()); :请修改您的帖子,我会将其标记为 awnser。
    • @bodycountPP 已更新,但不确定如何检查空值?
    • 它至少告诉我在哪里寻找 AllowDBNULL 值。谢谢
    【解决方案2】:
    SELECT column_name, is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ?
    

    【讨论】:

      【解决方案3】:

      DataColumn 有一个AllowDBNull 属性。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-05
        • 1970-01-01
        • 2014-10-14
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多