0
public int ColumnCountinFailedQueue(long QueueNo)
{
      string query = "select count(QueueNo) 
                      from NS_FailedQueue 
                      where queueid = @QueueNo";

我没有收到 QueueNo,这是不正确的。

4

5 回答 5

2
string query = "select count(QueueNo) "
             + "from NS_FailedQueue "
             + "where queueid = " + QueueNo.ToString();
于 2012-09-21T14:58:48.100 回答
0

它应该是这样的:

public int ColumnCountinFailedQueue(long QueueNo) 
{
    string query = "select count(QueueNo) from NS_FailedQueue where queueid = "+QueueNo.ToString();
}
于 2012-09-21T14:59:35.783 回答
0
string query = "select count(QueueNo) "
             + "from NS_FailedQueue "
             + "where queueid = " + QueueNo;

从我的角度来看 queueid 可以是整数......如果不是......

queueid 像 QueueNo.tostring()

于 2012-09-21T15:06:58.907 回答
0

我讨厌用 + 连接字符串,所以这是我的解决方案

 string   query = string.Format(@"select count(QueueNo) from NS_FailedQueue where queueid={0}", QueueNo);

但我认为最好使用sqlparameter

于 2012-09-21T15:07:55.933 回答
0

我看到您正在尝试在这里进行参数化查询。您的问题缺少一些关键要素。如果您使用的是原始 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 注入的攻击。

于 2012-09-21T15:26:44.123 回答