次のコードをSQLのストアドプロシージャとして使用していますが、@DBNAMEを受け入れていないため、宣言する必要があると宣言しています。ここで単純なSQL更新クエリをパラメータ化する
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE UpdateSQL
-- Add the parameters for the stored procedure here
@UpdateField varchar(25),
@UpdateValue varchar(25),
@FilterField varchar(25),
@FilterValue varchar(25),
@DBNAME sysname
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
UPDATE @DBNAME SET @UpdateField = @UpdateValue WHERE @FilterField = @FilterValue
END
GO
は、SQLプロシージャを呼び出すC#の機能です:
internal static bool UpdateSql(SqlArgs pSqlArgs)
{
var pwd = GetPwd();
var sqlCred = new SqlCredential(Sqluser, pwd);
var tCatalog = GetDbo(pSqlArgs.PCatalog);
var sqlConnection = new SqlConnection
{
ConnectionString = $"Data Source={SqlServer};Initial Catalog={tCatalog};",
Credential = sqlCred
};
var sqlCommand = new SqlCommand
{
Connection = sqlConnection,
CommandText = "UpdateSQL",
Parameters = { new SqlParameter("@DB", pSqlArgs.PDbo), new SqlParameter("@UpdateField", pSqlArgs.PUpdateField),
new SqlParameter("@UpdateValue", pSqlArgs.PUpdateValue), new SqlParameter("@FilterField", pSqlArgs.PFilterField),
new SqlParameter("@FilterValue", pSqlArgs.PFilterValue) },
CommandType = CommandType.StoredProcedure,
};
try
{
sqlConnection.Open();
return sqlCommand.ExecuteNonQuery().Equals(1);
}
catch (SqlException ex)
{
MessageBox.Show([email protected]"Error: {ex.Message}", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return false;
}
finally
{
sqlConnection.Close();
}
}
私が実行しようとしている最終的な機能がある:USE @database UPDATE @TableのSET @UpdateField = @UpdateValue WHERE @ FilterField = @FilterValue
だけでなく、あなたの手順の実行コールを記載してください。 – Ethilium
あなたはsysname型として宣言しましたが、更新ステートメントにはテーブルが必要です。それがあなたがそのエラーを起こしている理由です。エラーは実際には「テーブル変数@dbnameを宣言する必要があります – geekzster