2

我必须使用“@”(我不知道它的名字)。我可以在更新删除或插入语句中使用它,但我不能在其中使用它它给出的 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 或其他字符类型
如果是这种情况,那么以这种方式更改您的行
(255 是您的字段 URL 的假定长度)

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

顺便说一下,'@' 被称为“参数前缀”

编辑:看到 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() 并捕获返回以重用的 SqlConnection 而无需创建另一个
  • 使用之前创建的 SqlCommand 创建了 SqlDataAdapter(所以@URL 参数到达了 Sql)

OP 使用了 closeConnection() 并且我们看不到此方法的内部,但我认为这using足以关闭和处理连接。

编辑:创建 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 回答