public int ColumnCountinFailedQueue(long QueueNo)
{
string query = "select count(QueueNo)
from NS_FailedQueue
where queueid = @QueueNo";
我没有收到 QueueNo,这是不正确的。
string query = "select count(QueueNo) "
+ "from NS_FailedQueue "
+ "where queueid = " + QueueNo.ToString();
它应该是这样的:
public int ColumnCountinFailedQueue(long QueueNo)
{
string query = "select count(QueueNo) from NS_FailedQueue where queueid = "+QueueNo.ToString();
}
string query = "select count(QueueNo) "
+ "from NS_FailedQueue "
+ "where queueid = " + QueueNo;
从我的角度来看 queueid 可以是整数......如果不是......
queueid 像 QueueNo.tostring()
我讨厌用 + 连接字符串,所以这是我的解决方案
string query = string.Format(@"select count(QueueNo) from NS_FailedQueue where queueid={0}", QueueNo);
但我认为最好使用sqlparameter
我看到您正在尝试在这里进行参数化查询。您的问题缺少一些关键要素。如果您使用的是原始 ADO.NET,则参数化查询如下所示:
public int ColumnCountinFailedQueue(long QueueNo)
{
string query = "select count(QueueNo)
from NS_FailedQueue
where queueid = @QueueNo";
int queueCount = 0;
using (SqlConnection connection = new SqlConnection("connectionString"))
using (SqlCommand getQueueCountCommand = new SqlCommand(query, connection))
{
getQueueCountCommand.Parameters.AddWithValue("@QueueNo", QueueNo);
connection.Open();
queueCount = (int)getQueueCountCommand.ExecuteScalar();
}
return queueCount;
}
此外,由于您只得到一行一列,因此您可以使用 ExecuteScalar 来获取结果。
应该注意的是,将参数作为字符串连接到查询末尾的其他答案将起作用,并且在这种特定情况下,SQL 注入不存在漏洞,因为您的方法参数上的 long 强制它是一个数字。问题在于,如果这个参数被改为字符串,它将容易受到 SQL 注入的攻击。