异常存储过程参数

Exception stored procedure parameter

我有这个代码

SqlConnection conn = new SqlConnection(connstring);
SqlCommand cmd = new SqlCommand();
SqlDataAdapter adapter = new SqlDataAdapter();
cmd.CommandType = CommandType.StoredProcedure;
cmd = new SqlCommand("s_SCT_Composition", conn);

SqlParameter param1 = new SqlParameter("@idServ", SqlDbType.Int);
param1.Value = 1002262;

cmd.Parameters.Add(param1);

adapter.SelectCommand = cmd;

try
{
    adapter.Fill(tableCompositionNomenclature);
}

catch (Exception ex)
{
    MessageBox.Show(ex.ToString());

}
DataGridNameService.ItemsSource = tableCompositionNomenclature.DefaultView;

发生以下异常

procedure or function expects parameter which was not specified

存储过程:

ALTER PROCEDURE [dbo].[s_SCT_Composition]
 @IdServ Integer    
AS 
``SELECT CAST (0 as bit) as 'chk', dbo.s_Serv.NameServ as 'NameServNomenc', dbo.rs_Serv.IdServ as 'IdServ', dbo.s_serv.IdServ as 'IdServNomenc'
FROM     dbo.rs_Serv INNER JOIN
                  dbo.rs_ServK ON dbo.rs_Serv.IdServ = dbo.rs_ServK.IdServM INNER JOIN
                  dbo.s_Serv ON dbo.rs_ServK.IdServN = dbo.s_Serv.IdServ
                  where dbo.rs_Serv.IdServ = @IdServ;   

有什么问题吗?

此方法在我的代码中创建 table:

DataColumn column;

column = new DataColumn();
column.DataType = System.Type.GetType("System.Boolean");
column.ColumnName = "chk";
column.ReadOnly = false;
tableCompositionNomenclature.Columns.Add(column);

column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "IdServNomenc";
column.ReadOnly = false;
tableCompositionNomenclature.Columns.Add(column);

column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "NameServNomenc";
column.ReadOnly = true;
tableCompositionNomenclature.Columns.Add(column);

column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "IdServ";
column.ReadOnly = true;

tableCompositionNomenclature.Columns.Add(column);

//DataGridNameService.ItemsSource = tableCompositionNomenclature.DefaultView;
DataGridNameService.CanUserAddRows = false;

这是我的代码创建的table,它可能是一个问题

我调试了我所有的代码选项一直存在,但还是出现异常

尝试更改参数名称,结果还是一样

试图改变传递参数的类型,结果还是一样

尝试设置两个参数,结果一样

可能是Fill方法出错,收不到参数?

SqlParameter param1 = new SqlParameter("@idServ", SqlDbType.Int);

在此语句中,您不应在参数前加上 @ 符号。

此外,请确保区分大小写不是问题所在。 "idServ" != "IdServ"

cmd.CommandType = CommandType.StoredProcedure;
cmd = new SqlCommand("s_SCT_Composition", conn);

这将失去第一行的效果,因为您创建了一个全新的对象。

试试这个:

cmd = new SqlCommand("s_SCT_Composition", conn);
cmd.CommandType = CommandType.StoredProcedure;