【发布时间】:2016-11-26 11:26:30
【问题描述】:
我正在开发类似“SQL 查询生成器”的东西。
为了能够创建WHERE 子句,我需要找出数据库中值的类型。
ie:如果值是 int 我将使用 (,=) 之类的运算符,在 DateTime 上我想添加 ,= 和一个组合框,用户可以在其中选择诸如“DateTime.Now”之类的东西.
这就是为什么我需要区分类型。
有什么方法可以从转换为 .NET 类型的表的列中获取类型?
我目前得到了这个代码:
using (SqlConnection conn = new SqlConnection(MonitoringContext.Instance.ConnectionString))
{
conn.Open();
string query = $"SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{SelectedDatabaseItem}' AND COLUMN_NAME = '{Criteria[currentIndex].ColumnValueComboBox.SelectedItem}'";
SqlCommand command = new SqlCommand(query, conn);
object reader = command.ExecuteScalar();
valueType = Type.GetType(reader.ToString());
}
if(valueType != null)
{
if (valueType == typeof(DateTime))
{
List<string> operators = new List<string>() { "<", ">", "=" };
Criteria[currentIndex].OperatorValueComboBox.ItemsSource = operators;
//Add datePicker
return;
}
if(valueType == typeof(int))
{
//Add textbox to criteria selector
return;
}
}
所以假设 DB 中的类型是 int,这可以正常工作,因为 Type.GetType("int") 将返回 typeof(int):
但是,例如“nvarchar”,我无法将其转换为字符串。
有没有内置函数可以转换这个?
【问题讨论】:
-
您必须手动完成,因为类型的数量非常有限,这不是什么大事
-
@SamiKuhmonen 好的,所以我从数据库中获取类型作为字符串,然后检查是否 (varchar => string, int => int, => dateTime => dateTime) ?
-
是的,只需为映射构建一个字典,您就可以轻松处理它
-
@SamiKuhmonen 感谢 dict 听起来不错!
标签: c# sql .net types converter