1. ホーム
  2. .net

[解決済み] プロシージャは提供されていないパラメータを予期している

2022-09-06 05:43:23

質問

SQL Server のストアドプロシージャにアクセスすると、エラーが発生します。

Server Error in '/' Application.
Procedure or function 'ColumnSeek' expects parameter '@template', which was not supplied. 

.netのデータ接続からSQLにパラメータを指定してストアドプロシージャを呼び出すと、この現象が発生します。 (System.data.SqlClient) を呼び出すと、パラメータを供給しているにもかかわらず、この現象が発生します。以下は私のコードです。

SqlConnection sqlConn = new SqlConnection(connPath);
sqlConn.Open();

//METADATA RETRIEVAL
string sqlCommString = "QCApp.dbo.ColumnSeek";
SqlCommand metaDataComm = new SqlCommand(sqlCommString, sqlConn);
metaDataComm.CommandType = CommandType.StoredProcedure;
SqlParameter sp = metaDataComm.Parameters.Add("@template",SqlDbType.VarChar,50);
sp.Value = Template;

SqlDataReader metadr = metaDataComm.ExecuteReader();

そして、私のストアドプロシージャは

   USE [QCApp]
   GO
   SET ANSI_NULLS ON
   GO
   SET QUOTED_IDENTIFIER ON
   GO

   ALTER PROCEDURE [dbo].[ColumnSeek] 
       @template varchar(50)
   AS
   EXEC('SELECT Column_Name, Data_Type 
   FROM [QCApp].[INFORMATION_SCHEMA].[COLUMNS] 
   WHERE TABLE_NAME = ' + @template);

ここで何が間違っているのか考えています。

編集してください。 結局のところ、TemplateがNULLだったのは、URL経由で渡されるパラメータから値を取得していたためで、URLのパラメータ渡しを間違えていました(私が使っていたのは @ の代わりに & )

どのように解決するのですか?

アプリケーションのコードを確認し、@template にどのような値を設定しているのかを見てみます。私は、それが NULL であり、そこに問題があるのではないかと思います。