【问题标题】:Visual Studio couldn't find stored procedureVisual Studio 找不到存储过程
【发布时间】:2017-12-01 13:07:14
【问题描述】:

我在 SQL Server 中添加了存储过程 - 代码如下所示:

CREATE PROCEDURE [dbo].[sp_insertinfo]
    @model NVARCHAR(255),
    @price INT,
    @id INT
AS
    INSERT INTO computers (model, price, id)
    VALUES (@model, @price, @id)

    SET @id = SCOPE_IDENTITY()

    SELECT SCOPE_IDENTITY()
GO

CREATE PROCEDURE [dbo].[sp_getinfo]
AS
    SELECT * 
    FROM computers
GO  

之后我尝试在 Visual Studio 中使用它

using (SqlConnection con = new SqlConnection(ConnectionSTring))
{
    con.Open();

    SqlCommand cmd = new SqlCommand(SqlExpression,con);
    cmd.CommandType = System.Data.CommandType.StoredProcedure;

    SqlParameter modelparam = new SqlParameter
                {
                    ParameterName = "@model",
                    Value = model
                };

    SqlParameter priceparam = new SqlParameter
                {
                    ParameterName = "@price",
                    Value = price
                };

    SqlParameter idparam = new SqlParameter
                {
                    ParameterName = "@id",
                    Value = id
                };

    cmd.Parameters.Add(modelparam);
    cmd.Parameters.Add(priceparam);
    cmd.Parameters.Add(idparam);

    int rid = cmd.ExecuteNonQuery();

我收到以下错误:

找不到存储过程“sp_insertinfo”。

可能是什么问题?

【问题讨论】:

  • 一个可能的问题是连接字符串没有指向正确的数据库。另一个可能的问题是您尚未在用于应用程序的数据库上创建过程。根据您提供的信息,只能假设。另外,请阅读this link 并避免将存储过程命名为 sp_。
  • 看起来这是程序名称的问题,我将名称更改为 insert_info 和 get_info ,现在它工作得很好。谢谢
  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!

标签: sql-server visual-studio stored-procedures ado.net


【解决方案1】:

我将过程名称从 sp_insertinfo 更改为 insert_info 和 sp_getinfo -> get_info 并且它工作正常

【讨论】:

猜你喜欢
  • 2015-09-24
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多