2016-12-05 119 views
0

我无法将参数传递给存储过程。抛出错误,但无法获取所需的输出。 .cs是:将参数传递给ASP.NET的存储过程WinForm

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     if (cbRegions.SelectedIndex > 0) 
     { 
      con = new SqlConnection(connectionString); 
      cmd = new SqlCommand("dbo.SectionIncharge", con); 
      cmd.Parameters.Add("@RegionName", SqlDbType.VarChar, 50).Value = cbRegions.SelectedItem.ToString(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Connection = con; 
      con.Open(); 
      DataTable table = new DataTable(); 
      table.Load(cmd.ExecuteReader()); 
      dgvResults.DataSource = table; 
      con.Close(); 
     } 
    } 
    catch 
    { 

    } 
} 

.sql是:

ALTER PROCEDURE [dbo].[SectionIncharge] @RegionName varchar(50) --name 
AS 
select UserName 
from SystemUser 
where Description LIKE 'RD OFFICE ' + @RegionName AND 
Enable = 'Y' 
GO 

我仔细检查过的存储过程在SQL Server Management Studio中工作正常,但是当我试图从WinForm的,不输出调用它。有人可以请帮助。谢谢

+0

如果在SSMS中调用存储过程是好的,那么问题出在你的C#代码上,而不是用db代码。 –

+0

有人已经指出ExecuteNonQuery给你... 另外,如果你使用LIKE,也许你想连接'%'到你的参数值在proc – AntDC

回答

0

方法ExecuteNonQuery(因为它可以从名称中猜到)只是执行查询,并没有从服务器接收任何输出。

所以你需要得到你正在选择的结果 - 你必须使用ExecuteReader它返回的方法和处理结果(参见MSDN页面底部的例子)。

或者,如果您使用数据表作为您的网格的源代码 - 您可以使用SqlDataAdapter类和它的Fill方法来填充这样的数据表。

+0

我已经更新了代码,但无济于事。在dubugging时,游标从'con = new SqlConnection(“connectionString”);''catch'语句跳转。 – Jogi

+0

@RehanKhan如果您将异常处理代码从'catch'更改为'catch(Exception exc)' - 您可以在调试时获得异常消息。可能它的连接字符串有问题。 –

+0

是的,我做到了这一点,看到InnerException消息,它说:字符串不是JSON格式。初始化字符串的格式不符合从索引0开始的规范。“ – Jogi

相关问题