C# 如何使用自定义参数和 sql 正文调用“sp_executesql”
C# how to call “sp_executesql” with custom parameters and sql body
我正在尝试从 C# 执行动态 SQL 并且我想使用 sp_executesql
因为我想传递一个字符串列表以用于 IN
中的语句动态 SQL 传递给 sp_executesql
.
问题是我不知道该怎么做。
到目前为止我是这样做的:
using (var dbCommand = databaseConnection.CreateCommand())
{
dbCommand.CommandType = CommandType.StoredProcedure;
dbCommand.CommandText = "sp_executesql";
var sqlParam = dbCommand.CreateParameter();
sqlParam.DbType = DbType.String;
sqlParam.ParameterName = "stmt";
sqlParam.Value = sql.SQL;
dbCommand.Parameters.Add(sqlParam);
var incidentIdParam = dbCommand.CreateParameter();
incidentIdParam.ParameterName = "incidentId";
incidentIdParam.DbType = DbType.Int32;
incidentIdParam.Value = arguments.filterAttributes.incidentId;
dbCommand.Parameters.Add(incidentIdParam);
dbCommand.ExecuteReader();
}
这样可以吗?
作为一个选项,您可以在客户端格式化 SQL 并传递给存储过程就绪字符串。例如:
sql.SQL = "UPDATE ORDERS SET STATUS = 1 WHERE ID = %param%";
然后
sqlParam.Value = sql.SQL.Replace("%param%", arguments.filterAttributes.incidentId.ToString());
我正在尝试从 C# 执行动态 SQL 并且我想使用 sp_executesql
因为我想传递一个字符串列表以用于 IN
中的语句动态 SQL 传递给 sp_executesql
.
问题是我不知道该怎么做。
到目前为止我是这样做的:
using (var dbCommand = databaseConnection.CreateCommand())
{
dbCommand.CommandType = CommandType.StoredProcedure;
dbCommand.CommandText = "sp_executesql";
var sqlParam = dbCommand.CreateParameter();
sqlParam.DbType = DbType.String;
sqlParam.ParameterName = "stmt";
sqlParam.Value = sql.SQL;
dbCommand.Parameters.Add(sqlParam);
var incidentIdParam = dbCommand.CreateParameter();
incidentIdParam.ParameterName = "incidentId";
incidentIdParam.DbType = DbType.Int32;
incidentIdParam.Value = arguments.filterAttributes.incidentId;
dbCommand.Parameters.Add(incidentIdParam);
dbCommand.ExecuteReader();
}
这样可以吗?
作为一个选项,您可以在客户端格式化 SQL 并传递给存储过程就绪字符串。例如:
sql.SQL = "UPDATE ORDERS SET STATUS = 1 WHERE ID = %param%";
然后
sqlParam.Value = sql.SQL.Replace("%param%", arguments.filterAttributes.incidentId.ToString());