【发布时间】: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