获取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 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