获取从SQL Server返回的字符串值

时间:2015-09-11 18:00:51

标签: c# sql-server

我使用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

2 个答案:

答案 0 :(得分:3)

首先,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;
}

答案 1 :(得分:2)

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

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

sqlsyntaxxxx.Append(faraca.ToString());

此外,您必须在方法value中设置DoThisStuff的值。就像现在一样......你将永远只返回一个空字符串。因此,您需要在return语句之前从结果集中提取一个字段...类似于:

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