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