【问题标题】:SqlDataAdapter returning zero rowsSqlDataAdapter 返回零行
【发布时间】:2018-10-26 19:05:46
【问题描述】:

我正在尝试执行一个使用以下代码返回数据的存储过程。 返回的结果是一个带有列名的表,但它没有返回任何行。

public static DataSet ExecuteStoredProcedure()
{
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();

    using (var context = new EFEntity())
    {
        var connectionString = ((System.Data.SqlClient.SqlConnection)context.Database.Connection).ConnectionString;

        using (var conn = new SqlConnection(connectionString))
        {
            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "sp.Name";
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("InputParam", 12345));
                cmd.CommandTimeout = 12000; //Timeout set to max

                using (var adapter = new SqlDataAdapter(cmd))
                {
                    adapter.Fill(ds);
                }
            }
        }
    }

    return ds; // Returns 0 Rows
}

存储过程有一个select 语句,并在单个表中返回结果,如下所示:

【问题讨论】:

  • 那么....什么是 sp.Name 以及您的数据是什么样的?
  • SP 有选择语句(单个数据表)
  • 添加了 SP 的示例结果,如果我展开 ds,它有一个包含所有列名的表,但没有结果行
  • 尝试“12345”而不是 12345。SqlConnector 不执行隐式转换
  • @Steve 哦,是的,我也刚刚发现,这就是问题所在。感谢您的帮助

标签: c# .net sql-server ado.net


【解决方案1】:

您的输入参数需要string 类型,而您的SqlParameter 正在传递int

SqlConnector 不执行隐式转换,因此不返回任何结果。

传入正确类型的数据应该可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多