【问题标题】:Why Is this returning no results when executed?为什么执行时没有返回结果?
【发布时间】:2016-07-24 00:12:15
【问题描述】:
SqlConnection conn = getConnection();
SqlCommand cmd = new SqlCommand();

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SP_PSLA_SEARCH"; //The stored procedure gets added
cmd.CommandTimeout = 0;
cmd.Connection = conn;

// Start adding the parameters of the stored procedure
cmd.Parameters.AddWithValue("@usrnm", thisUser.Username);

int constit = 0;

if (thisUser.Constituencies.Count > 0)
{
    foreach (KeyValuePair<int, string> kp in thisUser.Constituencies)
    {
        if (kp.Value == ddlConstituency.SelectedValue.ToString())
        {
            constit = kp.Key;
            break;
        }
    }
}

cmd.Parameters.AddWithValue("@cnstncy", constit);

string pdval = null;
int valtype = 0;

if (rbsearchradios.SelectedIndex == 0)
{
    try
    {
        pdval = searchVal;
        cmd.Parameters.AddWithValue("@Search", DBNull.Value);
        cmd.Parameters.AddWithValue("@pd", int.Parse(pdval));
        cmd.Parameters.AddWithValue("@type", valtype);
    }
    catch
    {
        System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "stop", "alert('Invalid PD Number Supplied! Please Provide A Valid Submission.');", true);
        return;
    }
}
else
{
    valtype = 1;
    cmd.Parameters.AddWithValue("@Search", searchVal);
    cmd.Parameters.AddWithValue("@pd", DBNull.Value);
    cmd.Parameters.AddWithValue("@type", valtype);
}

cmd.Parameters.AddWithValue("@app", 1);

conn.Open();                        

// Creates Dataadapter for execution
SqlDataAdapter dp2 = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();

dp2.Fill(ds, "name");

我正在尝试存储过程的参数,并让这个存储过程执行并将这个结果放入数据集中,但我什么也没得到。从字面上看。没有例外,只是存储过程没有结果。

这是存储过程:

DECLARE @return_value int

EXEC    @return_value = [dbo].[SP_PSLA_SEARCH] 
            @usrnm = N'tstone',
            @cnstncy = 55,
            @Search = N'primary',
            @pd = NULL,
            @type = 1,
            @app = 1

SELECT  'Return Value' = @return_value
GO

【问题讨论】:

  • 从内到外检查对象。你打电话给 USP,但它仍然有效吗?如果使用的谓词没有匹配项,您将不会得到任何结果,也不会发布错误。它只是没有匹配的行。
  • 您能否查看从 sql 分析器发送的 sql 语句以了解哪些参数值,您可能会发现哪里出错了。参数值基于 if 。尝试在 dp2.fill 之后 Debg.Write 参数值

标签: c# asp.net .net sql-server stored-procedures


【解决方案1】:

解决问题:

  1. 确保每个参数的值是什么,并在 Sql Server Management Studio 中直接对数据库执行相同的查询。
  2. 检查是否正确使用了数据集中的结果(从代码中看不清楚)

一般来说,你也可以尝试简化,让你的代码更清晰:

  • return和if (rbsearchradios.SelectedIndex == 0)的块可以在开头移动,创建SqlCommand然后break没有意义
  • 如果 SP 只返回单个值,您可以使用ExecuteScalar() 方法,该方法更快更直接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2012-06-16
    • 2014-06-29
    • 2017-06-07
    • 2020-09-24
    相关资源
    最近更新 更多