【问题标题】:Winforms: How to query a database with a sql function using SqlCommand?Winforms:如何使用 SqlCommand 使用 sql 函数查询数据库?
【发布时间】:2014-04-18 10:39:45
【问题描述】:

我有一个采用单个字符串参数 (ID) 的方法。

我想使用SqlCommand 来返回查询结果的DataTable。我试图在查询中从我的数据库(Sql Server)调用一个表函数并传入我的 ID 参数。这个DataTable 的内容然后将填充一个组合框。这是我到目前为止所拥有的......

 public string populateCompanyTransSellingEntityLookUp(string BlockId)
    {
        string _sql = "";  

        SqlCommand _comm = new SqlCommand();
        _comm.Parameters.AddWithValue("(@block_id", BlockId);
        _comm.CommandText = "SELECT [name] FROM dbo.fnGetBlockCompanyWIList(@block_id) ORDER BY [name]; ";
        _comm.Connection = _conn;
        _comm.CommandTimeout = _command_timeout;

        DataTable dt = new DataTable();
        try
        {
            SqlDataReader myReader = _comm.ExecuteReader();
            dt.Load(myReader);
        }
        catch (Exception)
        {

            throw;
        }

        Combo.DataSource = dt;
        return _sql;                
    }

但我得到一个错误,“必须声明标量变量'@block_id'”。为什么?

【问题讨论】:

  • 我不明白问题出在哪里。
  • _comm.Parameters.AddWithValue("@block_id", BlockId);_comm.CommandText = "SELECT [company_int_name] FROM dbo.fnGetBlockCompanyWIList(@block_id) ORDER BY [company_int_name];";
  • 这里没有问题
  • 到底出了什么问题?你有例外吗?结果集是否为空?如果您不提出问题,没有人可以帮助您。

标签: c# sql sql-server winforms


【解决方案1】:

你这里有一个额外的括号,你应该删除它:

 _comm.Parameters.AddWithValue("(@block_id", BlockId);
                               ^^^

也许在你设置CommandText之后给你的参数赋值并不重要:

_comm.CommandText = "SELECT [name] FROM dbo.fnGetBlockCompanyWIList(@block_id) ORDER BY [name]; ";
_comm.Parameters.AddWithValue("@block_id", BlockId);

【讨论】:

  • _comm.Connection = _conn;怎么样,可以放在_comm.CommandText之后吗?
  • @V-SHY 是的,没关系。它们是不同的属性。重要的是在尝试执行命令之前设置Connection 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2021-09-20
  • 2022-01-16
相关资源
最近更新 更多