SQL函数在c#中返回Wrong
本文关键字:返回 Wrong 函数 SQL | 更新日期: 2023-09-27 18:27:58
我在SQL中有一个函数,它在SQL管理中执行时返回正确答案这是我的功能
ALTER FUNCTION [dbo].[Dore1]
(@First NVARCHAR(50), @second NVARCHAR(50))
RETURNS INT
AS
BEGIN
DECLARE @Tedad INT
SET @tedad = (SELECT COUNT(sh_gharardad)
FROM OrgGharardad
WHERE OrgGhAghdDate BETWEEN @First
AND @second)
RETURN @Tedad
END
但当我在c#程序中使用它时,它在该代码中返回0(零)值。我哪里写错了?
int dore1, dore2;
ConnectDb Contact = new ConnectDb();
Contact.connect();
SqlCommand Cmd = new SqlCommand("dore1", cnn);
SqlCommand Cmd2 = new SqlCommand("dore2", cnn);
Cmd.CommandType = CommandType.StoredProcedure;
Cmd2.CommandType = CommandType.StoredProcedure;
cnn.Open();
Cmd.Parameters.AddWithValue("@First", txt_1_aghaz.Text);
Cmd.Parameters.AddWithValue("@Second", txt_1_payan.Text);
dore1=Convert.ToInt32( Cmd.ExecuteScalar());
Cmd2.Parameters.AddWithValue("@First2", txt_2_aghaz.Text);
Cmd2.Parameters.AddWithValue("@second2", txt_2_payan.Text);
dore2= Convert.ToInt32( Cmd2.ExecuteScalar());
CreateChart(dore1, dore2);
cnn.Close();
在调用函数时,必须考虑其返回值。
dore1的c#代码
int dore1;
ConnectDb Contact = new ConnectDb();
Contact.connect();
SqlCommand Cmd = new SqlCommand("dore1", cnn);
Cmd.CommandType = CommandType.StoredProcedure;
cnn.Open();
Cmd.Parameters.AddWithValue("@First", txt_1_aghaz.Text);
Cmd.Parameters.AddWithValue("@Second", txt_1_payan.Text);
// setup out parm
var outParm = Cmd.Parameters.Add("@Tedad");
outParm.Direction = ParameterDirection.ReturnValue;
Cmd.ExecuteScalar();
// this is safe as long as select count() returns a number
dore1 = (Int32) outParm.Value;
T-SQL函数
您有一个特定的日期格式,最接近的是日本格式yyyy/mm/dd,代码为111。然而,1392年是一个较低的年份。这些值在你的表中吗?sql日期时间格式不处理1753之前的日期。如果没有存储日期,则可以删除convert语句并恢复到原始的tsql函数。
ALTER FUNCTION [dbo].[Dore1]
(@First NVARCHAR(50), @second NVARCHAR(50))
RETURNS INT
AS
BEGIN
DECLARE @Tedad INT
SET @Tedad = (SELECT COUNT(sh_gharardad)
FROM OrgGharardad
WHERE OrgGhAghdDate
BETWEEN CONVERT(datetime, @First , 111)
AND CONVERT(datetime, @second, 111))
RETURN @Tedad
END
ExecuteScalar需要一个1列1行的结果集,而不是函数返回的结果集。在标量结果中实际得到的是受影响行的COUNT值。
看看这个关于proc和函数之间的区别http://www.codeproject.com/Tips/286539/Difference-between-stored-procedure-and-function
您需要做一些事情来选择函数的结果,以便执行标量。
因为您使用的是日期。请确保在将它们发送到SQL之前对其进行转换。
Convert.ToDateTime(txt_1_aghaz.Text.ToString())
并确保您在SQL语句中收到的是Dates,而不是nvarchar(50)。
it通过此更改完成:SqlCommand Cmd=new SqlCommand("选择dbo.dore1(@First,@Second)",cnn);
我们不能直接调用函数,它不是存储过程
完成