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

ここでパラメータ化されたクエリを実行しようとしているようです。あなたの質問にはいくつかの重要な要素が欠けています。生の 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;
}

また、1 つの列で 1 つの行しか取得していないため、ExecuteScalar を使用して結果を取得できます。

パラメータを文字列としてクエリの最後に連結する他の回答が機能することに注意してください。この特定のケースでは、メソッド パラメータの long が強制的に数値になるため、SQL インジェクションの脆弱性はありません。問題は、このパラメーターが代わりに文字列に変更されると、SQL インジェクションに対して脆弱になることです。

于 2012-09-21T15:26:44.123 に答える
0
string query = "select count(QueueNo) "
             + "from NS_FailedQueue "
             + "where queueid = " + QueueNo;

私の観点からすると、キューIDは整数にすることができます...そうでない場合..

QueueNo.tostring() のような queueid

于 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

次のようになります。

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