获取SQL Server返回的字符串值

本文关键字:字符串 返回 SQL Server 获取 | 更新日期: 2023-09-27 18:12:18

我使用c#来运行SQL Server存储过程,我想将从SQL存储过程返回的变量存储在字符串变量中,但每次我尝试运行它时,我的c#语法错误告诉我它无法将varchar转换为int。当涉及到与c#和SQL通信时,我是非常新的,所以如果我遗漏了必要的信息或忽略了最明显的点,请原谅我。以下是我的代码,如果需要额外的代码来进一步帮助我解决这个问题,请告知我。提前感谢所有帮助过我的人

//C# Syntax
private void btnBTNBTN_Click()
{
    string returnedvariable = DoThisStuff(abcd, faraca);
}
public string DoThisStuff(string abcd, int faraca)
{
    string value = string.Empty; 
    sqlsyntaxxxx = new StringBuilder();
    sqlsyntaxxxx.Append("exec dbo.AlphaDawg ");
    sqlsyntaxxxx.Append("'" + faraca + "'");
    _dataSet = RUNSQL(abcd, sqlsyntaxxxx.ToString());
    return value;
}
public DataSet RUNSQL(string abcd, string sqlsyntaxxxx)
{          
    _connectionString = System.Configuration.ConfigurationManager.AppSettings[connectionString].ToString();     
    _sqlDatabaseConnection = new SqlConnection(_connectionString);
    _sqlCommand = new SqlCommand(sqlsyntaxxxx, _sqlDatabaseConnection);
    _sqlDatabaseConnection.Open();
    _dataSet = new DataSet();
    _sqlDataAdapter = new SqlDataAdapter(_sqlCommand);            
    _sqlDataAdapter.Fill(_dataSet, "Data");
    return _dataSet;
}
SQL存储过程
ALTER PROCEDURE [dbo].[AlphaDawg]
(
    @faraca int
)
AS
BEGIN
    DECLARE @returnvalue varchar(500)
    UPDATE [dbo].[redllama]
    SET [AZYXIE] = '682134'+[zoneNumber]
    WHERE faraca = @faraca
    Set @returnvalue = (Select [AZYXIE] from [dbo].[redllama] WHERE faraca = @faraca)
    return @returnvalue
END

获取SQL Server返回的字符串值

首先,SQL return语句只能从过程返回一个整数,并且该值不属于任何数据集。

在任何情况下,return都不是您想要的,即使对于99%的整数也是如此(它被用作其他SQL过程的状态值)。您通常通过执行SELECT来返回数据集。在你的程序中。您也可以通过输出参数返回单个值,但我建议在您更熟悉它之前使用数据集。

修改SQL过程如下,它应该工作:

ALTER PROCEDURE [dbo].[AlphaDawg]
(
    @faraca int
)
AS
BEGIN
    DECLARE @returnvalue varchar(500)
    UPDATE [dbo].[redllama]
    SET [AZYXIE] = '682134'+[zoneNumber]
    WHERE faraca = @faraca
    Select [AZYXIE] from [dbo].[redllama] WHERE faraca = @faraca)
END

嗯,看起来你的c#代码也需要稍微改变一下。我有一段时间没有这样做了,但我认为这是你想要的:

public string DoThisStuff(string abcd, int faraca)
{
    string value = string.Empty; 
    sqlsyntaxxxx = new StringBuilder();
    sqlsyntaxxxx.Append("exec dbo.AlphaDawg ");
    sqlsyntaxxxx.Append("'" + faraca + "'");
    _dataSet = RUNSQL(abcd, sqlsyntaxxxx.ToString());
    value = _dataSet.Tables[0].Rows[0]["AZYXIE"].ToString();
    return value;
}

您的参数变量faraca被定义为int。所以你需要改变这一行:

sqlsyntaxxxx.Append("'" + faraca + "'");

sqlsyntaxxxx.Append(faraca.ToString());

另外,您必须在方法DoThisStuff中设置value的值。因为现在……你总是会返回一个空字符串。因此,您需要在返回语句之前从结果集中取出一个字段…比如:

value = ds.Tables[0].Rows[0]["Myfield"]
然后将存储过程更改为:
ALTER PROCEDURE [dbo].[AlphaDawg]
(
    @faraca int
)
AS
BEGIN
    DECLARE @returnvalue varchar(500)
    UPDATE [dbo].[redllama]
    SET [AZYXIE] = '682134'+[zoneNumber]
    WHERE faraca = @faraca
    Select [AZYXIE] 
    from [dbo].[redllama] 
    WHERE faraca = @faraca
END