字符串变量可以包含int吗

时间:2019-02-28 22:22:12

标签: c# sql-server winforms

我有一个字符串变量string SQLstr = "SELECT [column] FROM [DB].[Table] WHERE [column]= {0}"。在查询VARCHAR列时,这工作得很好,但是如果我查询了一个int列,那么我会收到一条错误消息,大概是因为它正在使用字符串查询一个int列。

由于textBox1.Text是用户输入,在运行SqlDataAdapter cmd = new SqlDataAdapter(string.Format(SQLstrL,textBox1.Text), conn)时我有什么方法可以将其解释为int?

2 个答案:

答案 0 :(得分:1)

不要这样做

您拥有的内容很容易受到SQL Injection攻击的威胁;它实际上是在请求被黑客入侵。

有一种更好的方法可以完成相同的事情,这些事情可以抵御这些攻击,并且可以解决字符串与整数问题:

string SQLstr = "SELECT [column] FROM [DB].[Table] WHERE [column]= @Parameter";
var cmd = new SqlCommand(SQLstr, conn);
cmd.Parameter.Add("@Parameter", SqlDbType.Int).Value = int.Parse(textBox1.Text);

string SQLstr = "SELECT [column] FROM [DB].[Table] WHERE [column]= @Parameter";
var cmd = new SqlCommand(SQLstr, conn);
cmd.Parameter.Add("@Parameter", SqlDbType.VarChar, 20).Value = textBox1.Text;

请注意,您仍然必须知道查询中该位置的期望值。 没有什么可以帮助您摆脱困境,因为我们生活在一个类型鲜明的世界中。甚至可以推断您的数据类型的AddWithValue()方法也有significant reasons not to use it

答案 1 :(得分:0)

您可以尝试在sql结果的末尾连接一个空字符串。如果结果是(装箱的)int,则+“”将强制将其转换为字符串。

我同意有关SQL注入风险的评论。除非文本框受到很大限制,否则您不能向公众发布此内容。

相关问题