【发布时间】:2018-07-03 09:47:44
【问题描述】:
我有一个用于打印机碳粉库存的 WinForm 桌面应用程序。该数据库位于远程 SQL Server 上,仅由两个订单和交货表组成,库存数量仅通过跟踪订单和交货时间来计算。加上一堆包含制造商、型号、类别等的表格。
我有这个存储过程来提供订单表:
CREATE PROCEDURE [dbo].[spINSERTCARICO] (
@MARCA VARCHAR(25),
@MODELLO VARCHAR(25),
@QTA INT,
@OPERATORE CHAR(7),
@CAUSALE VARCHAR(255))
AS
DECLARE @MODELLOESATTO VARCHAR(25)
SELECT @MODELLOESATTO = Modello FROM Modelli WHERE Modello = @MODELLO AND Marca = @MARCA
INSERT INTO Carico
(Modello
,Qta
,DataCarico
,Operatore
,Note)
VALUES
(@MODELLOESATTO
,@QTA
,GETDATE()
,@OPERATORE
,@CAUSALE)
正在从这个方法执行:
public static int InsertCarico(string _marca, string _modello, string _causale, int _qta)
{
int insert = 0;
try
{
if (connection.State == ConnectionState.Closed) connection.Open();
using (SqlCommand cmd = new SqlCommand("spINSERTCARICO", connection))
{
cmd.Parameters.Add("@MARCA", SqlDbType.VarChar).Value = _marca;
cmd.Parameters.Add("@MODELLO", SqlDbType.VarChar).Value = _modello;
cmd.Parameters.Add("@QTA", SqlDbType.Int).Value = _qta;
cmd.Parameters.Add("@OPERATORE", SqlDbType.VarChar).Value = System.Environment.UserName;
cmd.Parameters.Add("@CAUSALE", SqlDbType.VarChar).Value = _causale;
cmd.ExecuteScalar();
}
return insert;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return 0;
}
}
我总是得到错误
过程或函数“spINSERTCARICO”需要参数“@MARCA”, 没有提供。
但我真的不明白这是从哪里来的。在调试时,我可以看到所有变量都已设置,并且在 SSMS 上手动时,sproc 可以正常工作
EXEC spINSERTCARICO 'OLIVETTI','B0987',1,'_MYPIDN','PROVA'
问题出在哪里?
谢谢, 大卫。
【问题讨论】:
-
设置
CommandType。cmd.CommandType = CommandType.StoredProcedure;命令类型的默认值为 Text。 -
@user1672994 我不敢相信。我失去了一小时调试:(((
标签: c# .net sql-server stored-procedures