2

「@」を使用する必要があります(名前はわかりません)。update delete または insert ステートメントで使用できますが、そこでは使用できません。URL は宣言する必要があります

       //SQL string to count the amount of rows within the OSDE_Users table
        string sql = "SELECT * FROM RSSFeeds where URL = @URL";

        SqlCommand cmd = new SqlCommand(sql, Connect());

        cmd.Parameters.Add("@URL", SqlDbType.VarChar, 500).Value = url;
        closeConnection();
        SqlDataAdapter adapt = new SqlDataAdapter(sql, Connect());
        DataSet ds = new DataSet();
        adapt.Fill(ds);

        // result of query filled into datasource
        adapt.Dispose();

        closeConnection();

        return ds;
4

2 に答える 2

4

この行は正しくないとしか思えません。

cmd.Parameters.Add("@URL", SqlDbType.Int).Value = url;

おそらく URL は Int ではなく、NVarChar またはその他の文字タイプ
です。この場合は、このように行を変更します
(フィールド URL の長さは 255 と想定されます)。

cmd.Parameters.Add("@URL", SqlDbType.NVarChar, 255).Value = url;

ちなみに、「@」は「パラメータプレフィックス」と呼ばれます

EDIT:OPからの最後の編集を見て、答えを更新して、正しい方法だと思うことを示します。

   //SQL string to count the amount of rows within the OSDE_Users table 
    string sql = "SELECT * FROM RSSFeeds where URL = @URL"; 
DataSet ds = new DataSet(); 
    using(SqlConnection cnn = Connect())
    using(SqlCommand cmd = new SqlCommand(sql, cnn)) 
    {
        cmd.Parameters.Add("@URL", SqlDbType.VarChar, 500).Value = url; 
        using(SqlDataAdapter adapt = new SqlDataAdapter(cmd))
        {

            adapt.Fill(ds); 
        }
    }
    return ds; 

私が変更したこと:

  • usingオブジェクトを閉じる/破棄することが保証されているステートメント内のすべての破棄可能なオブジェクトをカプセル化
  • Connect() を 1 回だけ呼び出し、返された SqlConnection をキャプチャして、別のものを作成せずに再利用しました
  • 前に作成した SqlCommand を使用して SqlDataAdapter を作成しました (@URL パラメーターが Sql に到達するように)

usingOP は closeConnection() を使用しており、このメソッドの内部は表示されませんが、接続を閉じて破棄するにはそれで十分だと思います。

編集: SqlDataAdapter を作成する行は、

using(SqlDataAdapter adapt = new SqlDataAdapter(cmd))
于 2012-04-08T20:07:43.947 に答える
1
cmd.Parameters.AddWithValue("@URL", url);

動作するはずです

于 2012-04-08T20:08:47.507 に答える