2016-07-24 152 views
0
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 
+0

检查从内部到外部的对象。你正在打电话给USP,但是它能工作吗?如果使用的谓词没有匹配,则不会得到任何结果,也不会发布错误。它只是没有匹配的行。 –

+0

您可以查看从sql profiller发送的sql语句以了解哪些参数值,您可能会发现错误在哪里。参数值基于if。尝试在dp2.fill后写入参数值 –

回答

0

要解决:

  1. 确保什么样的价值观有各参数,并直接对SQL Server Management Studio中的数据库执行相同的查询。
  2. 检查,如果你正确使用结果从数据集(目前还不清楚从代码)

在一般情况下,你也可以尽量简化,使你的代码更加清晰:

  • 的块返回并且if (rbsearchradios.SelectedIndex == 0)可以在开始时移动,创建SqlCommand然后中断
  • 如果SP只返回单个值是没有意义的,则可以使用ExecuteScalar()方法,该方法更快更简单。
相关问题