您好我有以下代码列出了给定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
值。我无法弄清楚它是哪一个。此外,我认为必须有一个更优雅的方式。
答案 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());
获取或设置一个值,该值指示此列中是否允许属于该表的行使用空值。
答案 2 :(得分:0)
SELECT column_name, is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ?