我有一个字符串变量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?
答案 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注入风险的评论。除非文本框受到很大限制,否则您不能向公众发布此内容。