C# 以C中的字符串格式获取存储过程的输出#

C# 以C中的字符串格式获取存储过程的输出#,c#,sql-server,tsql,stored-procedures,sqlcommand,C#,Sql Server,Tsql,Stored Procedures,Sqlcommand,我有一个返回字符串的存储过程: 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

我有一个返回字符串的存储过程:

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没有参数,并且提供了参数

我不确定我做错了什么。能否告诉我如何以字符串格式获取存储过程的输出?

SP中的更改:

DECLARE @SqlStatement VARCHAR(MAX) OUTPUT 
C#代码的更改:


您的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());
然后你可以像这样得到你想要的绳子

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());
var tableNames=newlist();
var con=新的SqlConnection(
ConfigurationManager.ConnectionString[“DBBASE”].ConnectionString);
使用(var cmd=newsqlcommand(“GetTableNames”,con)
{
CommandType=CommandType.StoredProcess
})
{                 
cmd.Parameters.Add(“@schema”,“TMP”);
con.Open();
使用(var reader=cmd.ExecuteReader())
{
while(reader.MoveNext())
{
tableNames.Add(reader.GetString(0))
}
}
}
var result=string.Join(
环境,新线,
表名
.Select(tn=>string.Format(“DROP TABLE[TMP].[0}];”,tn))
.ToArray());

其中是
@ReturnVal
是SP@Ganesh_Devlekar没有,只是编辑了我想返回的问题,但是没有。使用returnParameter.Direction=ParameterDirection.Outputinstead@Jauch您确实在存储过程中提到了输出参数……请粘贴整个存储过程。存储过程不会返回任何内容。无论如何,在TSQL中进行字符串连接有什么意义?我收到了错误:string[1]:Size属性的大小无效,为0。@nate,您必须提供varchar类型的参数的大小。试试-1。示例:它在以下位置出错:cmd.ExecuteNonQuery();在参数的definitopn中尝试使用-1:)cmd.Parameters.Add(“SqlStatement”,SqlDbType.VarChar,-1);var returnParameter=cmd.Parameters.Add(“@SqlStatement”,SqlDbType.VarChar,-1);