C# Can';无法找到存储过程

C# Can';无法找到存储过程,c#,sql,sql-server,C#,Sql,Sql Server,当我试图更新我的表的数据时,我得到了一个错误 找不到存储过程 怎么了 SQL: CREATE PROCEDURE GetContactName @Name char(20), @SecondName char(20) output as SELECT @SecondName = [Second Name] FROM WPF.dbo.contacts WHERE Name = @Name sqlConnection.Open(); SqlCommand cmd

当我试图更新我的表的数据时,我得到了一个错误

找不到存储过程

怎么了

SQL:

CREATE PROCEDURE GetContactName
   @Name char(20),
   @SecondName char(20) output
as
   SELECT @SecondName = [Second Name] 
   FROM WPF.dbo.contacts 
   WHERE Name = @Name
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();
C#:

CREATE PROCEDURE GetContactName
   @Name char(20),
   @SecondName char(20) output
as
   SELECT @SecondName = [Second Name] 
   FROM WPF.dbo.contacts 
   WHERE Name = @Name
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和SQLServer2008ManagementStudio

我找不到存储过程,但当我执行SQL代码时,它会说该过程已经存在

连接字符串:

Data Source=HOME;Initial Catalog=WPF;Integrated Security=True
  • 数据库:
    WPF
  • 架构:
    dbo.contacts

由于某种原因,当您使用sql查询创建过程时,它不会显示在“存储过程”文件夹中。但是,如果通过从“存储过程”文件夹中的上下文菜单中选择适当的选项来创建过程,则会显示该过程,并且一切正常。

这是数据库架构的问题。检查连接字符串中使用的用户id的默认架构是否与SP的架构匹配。

只需在查询上方添加USE YourdataBaseName,后跟GO

**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#:     

您是否能够在Sql资源管理器中查看数据库并查看存储过程是否存在?您的应用程序是否具有查看存储过程的权限?您的应用程序是否指向正确的数据库/正确的凭据?能否显示您的连接字符串?另外:您在哪个数据库和架构中创建了存储过程?您能确认您的凭据有权访问存储过程吗?您可以尝试删除存储过程并将其重新添加到测试中。您是否尝试通过代码或MSSQL中的查询编辑器创建存储过程?是。”“已存在”发生,因为您正在使用创建过程(而不是ALTER过程)。现在不用担心。您需要在SSMS中打开对象浏览器,查看SP所在的架构。它不是这样工作的。问题一定是别的。可能进程是在另一个数据库中创建的。不,我只有一个非系统数据库-WPF。没有用于过程的文件夹。此文件夹仅列出已定义的所有过程。如果你的进程没有出现在那里,它就不存在。不管什么原因。也许它进了主人的房间?为什么用数据库名(WPF.dbo.contacts)限定表名?没有它就不行,对吧?因为它进入了错误的数据库。我有四个系统数据库:master、model、msdb、tempdb。那里没有存储过程。但是是的,没有DB名称它就不能工作。我不知道。。它正在工作,我很高兴=)