【发布时间】:2020-02-14 14:00:10
【问题描述】:
我有这段代码,它显示了我使用SqlClient 创建的数据库,但我不知道如何检查表中的列是否添加为可空或不可空。
string[] defaultTables = { "AspNetUsers", "AspNetRoleClaims", "AspNetUserClaims", "AspNetUserLogins", "AspNetUserRoles", "AspNetUserTokens", "AspNetRoles", "__EFMigrationsHistory" };
dblist.ForEach((string DbName) => {
strConnection = $@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog={DbName};Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
using (SqlConnection conn = new SqlConnection(strConnection)) {
conn.Open();
using (cmdSql = new SqlCommand(strConnection, conn)) {
DataTable dt = conn.GetSchema("Tables");
foreach (DataRow row in dt.Rows) {
string tablename = row[2].ToString();
if (!defaultTables.Any(x => x == tablename)) {
tables.Add(tablename);
using (cmdSql = new SqlCommand($"Select * FROM {tablename}", conn)) {
SqlDataReader reader = cmdSql.ExecuteReader();
if (reader.Read()) {
for (int i = 0; i < reader.FieldCount; i++)
Console.Write(reader.GetName(i) + " " + reader.GetDataTypeName(i) + $"" + ',');
}
}
}
}
}
}
});
【问题讨论】:
-
使用 INFORMATION_SCHEMA.Columns 系统视图,您的信息在 IS_NULLABLE 列中
-
好吧,
SqlDataReader不会告诉你 - 它只是读取结果,它不关心列是NULL还是NOT NULL -
或许这条 SQL 语句对你有帮助:stackoverflow.com/questions/5204684/…
-
@stuartd 我不知道,谢谢,因为它返回了值类型,如果它可以为空,它也可以返回。
-
检查这里返回的类型是否可以为空:
reader.GetDataTypeName(i)使用 g check for nullable。我不确定 sqlite 是否有元数据,但如果有,我会使用它,因为它会回答更多问题。
标签: c# sql-server