C# 从C传递时收到的SQL Out参数为null#
我试图在C# 从C传递时收到的SQL Out参数为null#,c#,sql,sql-server,stored-procedures,ado.net,C#,Sql,Sql Server,Stored Procedures,Ado.net,我试图在out参数中填充一个值,但它从存储过程返回为null 但是当我尝试通过SSM运行查询时,它工作得很好 存储过程: CREATE PROCEDURE [dbo].[USP_ABCD] (@signal_xml AS NVARCHAR(MAX) OUT) -- this parameter includes the result in case AS BEGIN DECLARE @signal_data XML SET @signal_data = cast(@
out
参数中填充一个值,但它从存储过程返回为null
但是当我尝试通过SSM运行查询时,它工作得很好
存储过程:
CREATE PROCEDURE [dbo].[USP_ABCD]
(@signal_xml AS NVARCHAR(MAX) OUT) -- this parameter includes the result in case
AS
BEGIN
DECLARE @signal_data XML
SET @signal_data = cast(@signal_xml as XML)
INSERT INTO DBLog
VALUES ('USP_ABCD', 'test', @signal_xml, ERROR_MESSAGE(), GETUTCDATE())
SET @signal_xml = 'ABCD';
END
private static void runSP()
{
try
{
var temp = File.ReadAllText(@"abcd\TEST1.txt");
var conStr = System.Configuration.ConfigurationManager.ConnectionStrings["test"].ConnectionString;
using (SqlConnection connection = new SqlConnection(conStr))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
// Setup the command to execute the stored procedure.
command.CommandText = "dbo.USP_ABCD";
command.CommandType = CommandType.StoredProcedure;
// Set up the output parameter to retrieve the summary.
SqlParameter paramSignalXml = new SqlParameter("@signal_xml", SqlDbType.NVarChar, -1);
paramSignalXml.Direction = ParameterDirection.Output;
paramSignalXml.Value = temp;
command.Parameters.Add(paramSignalXml);
// Execute the stored procedure.
command.ExecuteNonQuery();
Console.WriteLine((String)(paramSignalXml.Value));
var retValue = (String)(paramSignalXml.Value);
connection.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
调用此存储过程的C#代码:
CREATE PROCEDURE [dbo].[USP_ABCD]
(@signal_xml AS NVARCHAR(MAX) OUT) -- this parameter includes the result in case
AS
BEGIN
DECLARE @signal_data XML
SET @signal_data = cast(@signal_xml as XML)
INSERT INTO DBLog
VALUES ('USP_ABCD', 'test', @signal_xml, ERROR_MESSAGE(), GETUTCDATE())
SET @signal_xml = 'ABCD';
END
private static void runSP()
{
try
{
var temp = File.ReadAllText(@"abcd\TEST1.txt");
var conStr = System.Configuration.ConfigurationManager.ConnectionStrings["test"].ConnectionString;
using (SqlConnection connection = new SqlConnection(conStr))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
// Setup the command to execute the stored procedure.
command.CommandText = "dbo.USP_ABCD";
command.CommandType = CommandType.StoredProcedure;
// Set up the output parameter to retrieve the summary.
SqlParameter paramSignalXml = new SqlParameter("@signal_xml", SqlDbType.NVarChar, -1);
paramSignalXml.Direction = ParameterDirection.Output;
paramSignalXml.Value = temp;
command.Parameters.Add(paramSignalXml);
// Execute the stored procedure.
command.ExecuteNonQuery();
Console.WriteLine((String)(paramSignalXml.Value));
var retValue = (String)(paramSignalXml.Value);
connection.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
是否无法将值传递给输出参数,或者我是否遗漏了什么?有人能帮我吗?提前感谢。您在C#中传递参数的方式看起来不错,但是如果您希望
设置@signal_data=cast(@signal_xml as xml)
对分配给value
属性的temp
值进行操作,则需要使用参数direction.InputOutput
。然后需要在INSERT
语句中使用@signal\u data
。更好的是,如果temp
包含XML,则将其作为XML参数传递,并使用另一个参数作为文本输出。您的代码似乎没有问题。但是您可以尝试使用var retValue=Convert.ToString(paramSignalXml.Value)代码>。