以 C# 中的字符串格式获取存储过程的输出
本文关键字:获取 存储过程 输出 格式 字符串 | 更新日期: 2023-09-27 18:33:47
我有一个返回字符串的存储过程:
DECLARE @SqlStatement VARCHAR(MAX)
SELECT @SqlStatement =
COALESCE(@SqlStatement, '') + 'DROP TABLE [TMP].' + QUOTENAME(TABLE_NAME) + ';' + CHAR(13)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'TMP'
PRINT @SqlStatement
我尝试像这样返回字符串:
var con = new SqlConnection(ConfigurationManager.ConnectionStrings["DBBASE"].ConnectionString);
using (var cmd = new SqlCommand("proSQL", con)
{
CommandType = CommandType.StoredProcedure
})
{
cmd.Parameters.Add("SqlStatement", SqlDbType.VarChar);
var returnParameter = cmd.Parameters.Add("@SqlStatement", SqlDbType.VarChar);
returnParameter.Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
var result = returnParameter.Value;
}
当我运行代码时,出现错误:
我过程 proSQL 没有参数,并且提供了参数
不确定我做错了什么。有些人可以告诉我如何以字符串格式获取存储过程的输出吗?
你的SQL应该是这样的,
CREATE PROCEDURE [GetTableNames]
@schema NVARCHAR(128)
AS
SELECT
[TABLE_NAME]
FROM
[INFORMATION_SCHEMA].[TABLES]
WHERE
[TABLE_SCHEMA] = @schema
RETURN 0;
然后你可以像这样得到你想要的字符串,
var tableNames = new List<string>();
var con = new SqlConnection(
ConfigurationManager.ConnectionStrings["DBBASE"].ConnectionString);
using (var cmd = new SqlCommand("GetTableNames", con)
{
CommandType = CommandType.StoredProcedure
})
{
cmd.Parameters.Add("@schema", "TMP");
con.Open();
using (var reader = cmd.ExecuteReader())
{
while(reader.MoveNext())
{
tableNames.Add(reader.GetString(0))
}
}
}
var result = string.Join(
Environment.NewLine,
tableNames
.Select(tn => string.Format("DROP TABLE [TMP].[{0}];", tn))
.ToArray());
SP 中的更改:
DECLARE @SqlStatement VARCHAR(MAX) OUTPUT
C# 代码中的更改:
var returnParameter = new SQLParameter("@SqlStatement", SqlDbType.VarChar, -1);
returnParameter.Direction = ParameterDirection.Output;
cmd.Parameters.Add(returnParameter);