将“文本框值”动态转换为表列的数据类型值
本文关键字:数据类型 转换 文本 文本框值 动态 | 更新日期: 2023-09-27 18:32:44
我正在尝试构建动态查询,该查询将建立在用户选择的基础上,例如我的数据库结构如下所示:
columnname datatype
productid int
productname varchar(100)
updatedate datetime
lastsaledate datetime
我有一个组合框,它将动态加载表名。 如果选择了特定表,则所有列名称都将生成到ListBox,则用户将根据其要求选择列并将数据导出到Excel。 有时,他可能会尝试根据选择列并输入列的值来检索数据。
我的问题是因为我的sql查询是基于用户选择动态构建的,有时他可能会选择productid来检索所有产品,然后数据类型是int,那么我的sql查询应该像
select * from products where productid= @pid
由于@pid值是从文本框提供的,因此我将得到错误数据类型不匹配或其他内容。 如何动态转换为所选列的数据类型。
var type = Type.GetType(label2.Text);
queryCmd += " WHERE " + comboBox2.SelectedItem.ToString() + "=" + Convert.ChangeType(textBox1.Text, type);
public static Type GetType(string typeName)
{
var type = Type.GetType(typeName);
if (type != null) return type;
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
type = a.GetType(typeName);
if (type != null)
return type;
}
return null;
}
查找类型
要将字符串转换为具有类型名称的目标类型,如果您使用的是完整的类型名称,如 System.String
和 System.Int32
,您只需使用 Type.GetType(typeName)
.例如:
var type = Type.GetType("System.Int32");
如果不使用完整的类型名称,并且使用友好类型名称(如 string
和 int
(,则可以创建类型字典,并通过字典中的名称获取类型,例如:
var types = new Dictionary<string, Type>();
types.Add("bool", typeof(bool));
types.Add("int", typeof(int));
types.Add("string", typeof(string));
//and so on for byte, short, long, float, double, decimal, ...
然后:
var type = types["int"];
将字符串值转换为目标类型
您可以使用Convert.ChangeType(value, conversionType)
方法将值更改为转化类型。当值不可转换为目标类型时,还应处理可能FormatException
。例如:
var value = Convert.ChangeType("1", type);
将参数添加到命令
可以使用AddWithValue (parameterName, value)
方法将参数添加到命令的Parameters
集合中,并传递参数名称和从字符串转换的值。例如:
command.Parameters.AddWithValue("@Id", value);
注意
如果要继续使用字符串串联创建查询,例如问题的最后一个代码部分(存在 SQL 注入漏洞(,则不需要进行任何类型转换,因为您将仅使用字符串值,例如"Id=1"
是使用 "Id=" + textBox1.Text
创建的,不需要类型转换。 但我强烈建议停止使用字符串串联创建查询。
如果你想把一个字符串投射到一个int,你可以像这样投射它:
string value = "10";
int result = Convert.ToInt32(value);//value is what you want to convert
如果值转换失败,您将获得需要处理的异常。或者你可以像这样使用 TryParse:
bool result = Int32.TryParse(value, out number);
if (result)
{
Console.WriteLine("Converted '{0}' to {1}.", value, number);
}
else
}
// if (value == null) value = "";
Console.WriteLine("Attempted conversion of '{0}' failed.",
value == null ? "<null>" : value);
}
这些方法适用于所有数据类型。