我有类型不匹配的问题 - 我想。我有与数据库连接的应用程序并发送查询。这就是它的工作原理:
string wartosc1 = "'letters'";
NpgsqlCommand command9 = new NpgsqlCommand("SELECT * FROM RESOURCES WHERE TYPE = "+wartosc1, conn);
但是当我尝试执行它时,有答案:
System.FormatException: Input string was not in correct format.
我认为变量类型存在问题,因为我只输入:
SELECT * FROM RESOURCES WHERE TYPE ='letters'
一切都好。
有什么想法吗?
答案 0 :(得分:4)
您需要使用参数将值传递给查询。
阅读http://msdn.microsoft.com/en-us/library/yy6y35y8(v=vs.110).aspx了解如何操作。
var wartosc1 = "letters";
var command9 = new NpgsqlCommand("SELECT * FROM RESOURCES WHERE TYPE = @type", conn);
command9.Parameters.Add("@type", wartosc1);
答案 1 :(得分:2)
因为你写的时候;
"SELECT * FROM RESOURCES WHERE TYPE = " + wartosc1
你的命令就像;
SELECT * FROM RESOURCES WHERE TYPE = letters
这是错误的,因为我认为您的TYPE
列是某种 text 类型。如果您轻松解决此问题,可以在单引号中添加wartosc1
变量;
"SELECT * FROM RESOURCES WHERE TYPE = '" + wartosc1 + "'"
您应该始终在命令中使用parameterized queries
。它可以防止,忘记使用一些引号,逗号等。但更重要的是,这种字符串连接可用于SQL Injection
攻击。
string wartosc1 = "letters";
NpgsqlCommand command9 = new NpgsqlCommand("SELECT * FROM RESOURCES WHERE TYPE = @type", conn);
command9.Parameters.AddWithValue("@type", wartosc1);
答案 2 :(得分:0)
这是一个使用多个变量和一个日期的字符串插值示例:
var dt = DateTime.Now.AddDays(-30);
string wartosc1 = "letters";
string myStatement = $@"
SELECT *
FROM RESOURCES res
WHERE res.DATE_EXAMPLE >= '{dt}'
AND res.TYPE = '{wartosc1}'
"
注意只需设置
,此sql字符串即可进行sql注入wartosc1 = "somevalue' AND someOtherStatement 'thenDoSomethingBeforeApostrophe";
但是,可能您的环境不需要担心...在一个int周围不需要加撇号,但是在日期时间前后忘记它,会引发错误。