我怎么能把@在select sql语句中?

时间:2012-04-08 20:05:09

标签: c# sql

我必须使用“@”(我不知道它的名字)。我可以在更新删除或插入语句中使用它,但我不能在那里使用它,它给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;

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:1)

cmd.Parameters.AddWithValue("@URL", url);

应该有效