2016-12-05 120 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

相關問題