我想在C#方法中传递一个参数,它将接受SQL查询

时间:2012-09-21 14:57:40

标签: c# sql methods

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

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

5 个答案:

答案 0 :(得分:2)

string query = "select count(QueueNo) "
             + "from NS_FailedQueue "
             + "where queueid = " + QueueNo.ToString();

答案 1 :(得分:0)

它应该是这样的:

public int ColumnCountinFailedQueue(long QueueNo) 
{
    string query = "select count(QueueNo) from NS_FailedQueue where queueid = "+QueueNo.ToString();
}

答案 2 :(得分:0)

string query = "select count(QueueNo) "
             + "from NS_FailedQueue "
             + "where queueid = " + QueueNo;

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

像QueueNo.tostring()

这样的队列

答案 3 :(得分:0)

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

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

但我认为最好使用sqlparameter

答案 4 :(得分: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注入的攻击。<​​/ p>