我有一个项目通过 SMO 创建从 DataTable 到 SQL 表的表。
列的数据类型当前不从 System.Type 转换为 SMO.DataType。我可以通过案例声明来做到这一点,但我希望有一个更清洁的解决方案。也许涉及 TypeDescriptor.GetConverter(targetDataType)。
这适用于 System.types 和 SQL.DataTypes,但我无法将其转换为 SMO.DataTypes。
有什么建议或提示吗?
TIA
我最终使用 Case 语句来处理转换。工作正常。
我也是这样做的。我没有处理所有情况,然后在需要时添加。我的方法不是很干净...
public static SqlDbType MappingToSQLType(String CLRTypeName)
{
string[] t = CLRTypeName.Split('.');
for (int i = 0; i <= 31; i++)// there is 31 sqldatatypes
{
if (t[1].Equals("Int64") &&
((SqlDbType)i).ToString().ToLower().Equals("bigint"))
return ((SqlDbType)i);
else if (t[1].Equals("Int32") &&
((SqlDbType)i).ToString().ToLower().Equals("int"))
return ((SqlDbType)i);
else if (t[1].Equals("Int16") &&
((SqlDbType)i).ToString().ToLower().Equals("smallint"))
return ((SqlDbType)i);
else if (t[1].Equals("Boolean") &&
((SqlDbType)i).ToString().ToLower().Equals("bit"))
return ((SqlDbType)i);
else if (t[1].Equals("Double") &&
((SqlDbType)i).ToString().ToLower().Equals("float"))
return ((SqlDbType)i);
else if (t[1].Equals("Single") &&
((SqlDbType)i).ToString().ToLower().Equals("real"))
return ((SqlDbType)i);
else if (((SqlDbType)i).ToString().ToLower().Equals(t[1].ToLower()))
return ((SqlDbType)i);
}
return SqlDbType.NVarChar;
}