2014-07-12 99 views
1

當我嘗試更新我的表中的數據,我得到錯誤找不到可以存儲過程

找不到可以存儲過程

有什麼不對?

SQL:

CREATE PROCEDURE GetContactName 
    @Name char(20), 
    @SecondName char(20) output 
as 
    SELECT @SecondName = [Second Name] 
    FROM WPF.dbo.contacts 
    WHERE Name = @Name 

C#:

sqlConnection.Open(); 
SqlCommand cmd = new SqlCommand("GetContactName", sqlConnection); 
cmd.CommandType = CommandType.StoredProcedure; 

SqlParameter param = new SqlParameter(); 
param.ParameterName = "@Name"; 
param.SqlDbType = SqlDbType.Char; 
param.Direction = ParameterDirection.Input; 
cmd.Parameters.Add(param); 

param = new SqlParameter(); 
param.ParameterName = "@SecondName"; 
param.SqlDbType = SqlDbType.Char; 
param.Size = 20; 
param.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(param); 

cmd.ExecuteNonQuery(); 
sqlConnection.Close(); 

EDIT1

我使用VS13和SQL Server 2008 Management Studio中。

我找不到存儲過程,但是當我執行SQL代碼時,它說該過程已經存在。

連接字符串:

Data Source=HOME;Initial Catalog=WPF;Integrated Security=True 
  • 數據庫:WPF
  • 模式:dbo.contacts
+6

你能否在Sql Explorer中查看你的數據庫並且看到你的Sproc存在?你的應用程序是否有權限查看存儲過程?你的應用程序是否指向正確的數據庫/正確的憑據? – Prescott

+1

你能告訴我們你的**連接字符串**嗎?另外:您在哪個數據庫和架構中創建了存儲過程? –

+0

您能否確認您的憑證可以訪問存儲過程?您可以嘗試刪除它並重新添加它進行測試。 – Prescott

回答

0

出於某種原因,當你創建一個使用SQL查詢一個過程,它不是顯示在文件夾「存儲過程」中。但是,如果您通過從「存儲過程」文件夾中的上下文菜單中選擇適當的選項來創建過程,則會顯示該過程並且一切正常。

+0

這不是它的工作原理。問題一定是別的。也許proc是在不同的數據庫中創建的。 – usr

+0

不,我只有一個非系統數據庫 - WPF。 – dima

+0

程序文件夾沒有這樣的東西。該文件夾只列出了所有已定義的程序。如果你的proc沒有出現在那裏,它不存在。無論出於何種原因也許它成了主人?爲什麼用數據庫名稱(WPF.dbo.contacts)限定表名?沒有它就沒有用,對吧?因爲它進入了錯誤的數據庫。 – usr

1

這是一個數據庫模式的問題。檢查連接字符串中使用的用戶標識的默認模式是否與SP的模式匹配。

1

只需在您的查詢上面添加USE YourdataBaseName。

**USE YourdataBaseName 
Go** 

CREATE PROCEDURE GetContactName 
    @Name char(20), 
    @SecondName char(20) output 
as 
    SELECT @SecondName = [Second Name] 
    FROM WPF.dbo.contacts 
    WHERE Name = @Name 
C#: