将“文本框值”动态转换为表列的数据类型值

本文关键字:数据类型 转换 文本 文本框值 动态 | 更新日期: 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.StringSystem.Int32,您只需使用 Type.GetType(typeName) .例如:

var type  = Type.GetType("System.Int32");
如果不使用完整的类型名称

,并且使用友好类型名称(如 stringint (,则可以创建类型字典,并通过字典中的名称获取类型,例如:

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);
}

这些方法适用于所有数据类型。

相关文章: