我必须使用“@”(我不知道它的名字)。我可以在更新删除或插入语句中使用它,但我不能在它给出的 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;
最佳答案
我只能假设这一行不正确:
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))
关于c# - 如何在 select sql 语句中添加@?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066073/