sqlserver支持sql_variant类型
This commit is contained in:
parent
3df628a27d
commit
d63e91f0fd
|
@ -611,7 +611,7 @@ public partial class DAL
|
|||
|
||||
private IList<IDataTable> GetTables()
|
||||
{
|
||||
if (Db is DbBase db2 && !db2.SupportSchema) return new List<IDataTable>();
|
||||
if (Db is DbBase db2 && !db2.SupportSchema) return [];
|
||||
|
||||
var tracer = Tracer ?? GlobalTracer;
|
||||
using var span = tracer?.NewSpan($"db:{ConnName}:GetTables", ConnName);
|
||||
|
@ -634,7 +634,7 @@ public partial class DAL
|
|||
/// <summary>
|
||||
/// 获取所有表名,带缓存,不区分大小写
|
||||
/// </summary>
|
||||
public ICollection<String> TableNames => _cache.GetOrAdd("tableNames", k => new HashSet<String>(GetTableNames(), StringComparer.OrdinalIgnoreCase), 60) ?? new HashSet<String>();
|
||||
public ICollection<String> TableNames => _cache.GetOrAdd("tableNames", k => new HashSet<String>(GetTableNames(), StringComparer.OrdinalIgnoreCase), 60) ?? [];
|
||||
|
||||
/// <summary>
|
||||
/// 快速获取所有表名,无缓存,区分大小写
|
||||
|
@ -735,7 +735,7 @@ public partial class DAL
|
|||
}
|
||||
}
|
||||
|
||||
internal List<String> HasCheckTables = new();
|
||||
internal List<String> HasCheckTables = [];
|
||||
/// <summary>检查是否已存在,如果不存在则添加</summary>
|
||||
/// <param name="tableName"></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -1690,7 +1690,7 @@ internal class SqlServerMetaData : RemoteDbMetaData
|
|||
{ typeof(Double), new String[] { "float" } },
|
||||
{ typeof(Decimal), new String[] { "money", "decimal({0}, {1})", "numeric({0}, {1})", "smallmoney" } },
|
||||
{ typeof(DateTime), new String[] { "datetime", "smalldatetime", "datetime2({0})", "date" } },
|
||||
{ typeof(String), new String[] { "nvarchar({0})", "ntext", "text", "varchar({0})", "char({0})", "nchar({0})", "xml" } }
|
||||
{ typeof(String), new String[] { "nvarchar({0})", "ntext", "text", "varchar({0})", "char({0})", "nchar({0})", "xml", "sql_variant" } }
|
||||
};
|
||||
|
||||
#region 辅助函数
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
@ -479,4 +481,45 @@ public class SqlServerTests
|
|||
""";
|
||||
Assert.Equal(targetSql, sql);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetTables()
|
||||
{
|
||||
DAL.AddConnStr("sysSqlServer", _ConnStr, null, "SqlServer");
|
||||
var dal = DAL.Create("sysSqlServer");
|
||||
|
||||
var dbprovider = dal.DbType.ToString();
|
||||
var builder = new DbConnectionStringBuilder
|
||||
{
|
||||
ConnectionString = dal.ConnStr
|
||||
};
|
||||
|
||||
var dt = dal.Db.CreateSession().GetSchema(null, "Databases", null);
|
||||
var sysdbnames = new String[] { "master", "tempdb", "model", "msdb" };
|
||||
foreach (DataRow dr in dt.Rows)
|
||||
{
|
||||
var dbname = dr[0].ToString();
|
||||
if (Array.IndexOf(sysdbnames, dbname) >= 0) continue;
|
||||
|
||||
var connName = String.Format("{0}_{1}", "ms", dbname);
|
||||
|
||||
builder["Database"] = dbname;
|
||||
var connstr = builder.ToString();
|
||||
DAL.AddConnStr(connName, connstr, null, dbprovider);
|
||||
|
||||
try
|
||||
{
|
||||
var dal2 = DAL.Create(connName);
|
||||
var tables = dal2.Tables;
|
||||
XTrace.WriteLine("数据库{0}有表{1}张", dbname, tables.Count);
|
||||
|
||||
var xml = DAL.Export(tables);
|
||||
File.WriteAllText($"data\\{connName}.xml".GetFullPath(), xml);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (DAL.ConnStrs.ContainsKey(connName)) DAL.ConnStrs.Remove(connName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue