【发布时间】:2018-01-05 16:31:38
【问题描述】:
据我所知,这不是一个重复的问题,因为我提供了一个实际可行的替代方案。针对 .NET 4.5 的 VS 2012
常用代码:
public const string SP_PLANT = "hsp_BOM_EXP_SOURCE";
public const string SP_PARM_PLANT = "@Plant_CD";
public const string SP_PARM_PART_NUM = "@Mtrl_Number";
public const string SP_PARM_INCL_PURCH = "@Extend_BOM_Flag";
_SqlCmd = new SqlCommand(SP_PLANT, _Cnxn);
这行得通,但很杂乱。这也证明我尝试执行的存储过程或正在建立的连接没有某种拼写错误或问题。
string sqlCmd = "";
sqlCmd = string.Format(
"EXEC [dbo].[{0}] {1} = N'{2}', {3} = N'{4}', {5} = {6}",
SP_PLANT, SP_PARM_PLANT, "1234", SP_PARM_PART_NUM,
PartNum, SP_PARM_INCL_PURCH, (InclPurchased ? 1 : 0));
_SqlCmd.CommandType = CommandType.Text;
_SqlCmd.CommandText = sqlCmd;
这不起作用,但应该。
_SqlCmd.CommandType = CommandType.StoredProcedure;
_SqlCmd.Parameters.Add(SP_PARM_PLANT, SqlDbType.VarChar, 4);
_SqlCmd.Parameters.Add(SP_PARM_PART_NUM, SqlDbType.VarChar, 18);
_SqlCmd.Parameters.Add(SP_PARM_INCL_PURCH, SqlDbType.Bit);
_SqlCmd.Parameters[SP_PARM_PART_NUM].Value = PartNum;
_SqlCmd.Parameters[SP_PARM_PLANT].Value = "1234";
_SqlCmd.Parameters[SP_PARM_INCL_PURCH].Value = (InclPurchased ? 1 : 0);
返回的错误是:过程或函数“hsp_BOM_EXP_SOURCE”需要参数“@Plant_CD”,但未提供。
【问题讨论】:
-
当它不起作用时,你正在执行的SQL字符串是什么?
-
此失败最常见的原因是当参数值为空时;你确定这里不是这样吗?我们是否可以从头到尾看到一个完整的可运行的东西,它创建、填充参数并执行它?另外:
_SqlCmd是否共享? -
您是否对许多命令重复使用相同的 _SqlCmd 变量?如果您这样做(不好),您是否在重用之间清除参数列表?
-
明确地说,虽然我认为您意识到这一点:在任何情况下都不要使用
string.Format版本:) -
我注意到您的工作示例使用 NVarChar,但非工作示例使用 VarChar。存储过程中的类型是如何定义的?
标签: c# sql-server c#-4.0