C# c中的SQL函数返回错误
我在SQL中有一个函数,在SQL管理中执行时返回正确答案 这是我的职责C# c中的SQL函数返回错误,c#,function,mysql-management,executescalar,C#,Function,Mysql Management,Executescalar,我在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
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代码 T-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
您有一个特定的日期格式,最接近的是日本格式yyyy/mm/dd,即代码111。然而,1392年的年增长率较低。这些值在您的表中吗?sql datetime格式不处理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
调用函数时,必须考虑其返回值 dore1的c代码 T-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
您有一个特定的日期格式,最接近的是日本格式yyyy/mm/dd,即代码111。然而,1392年的年增长率较低。这些值在您的表中吗?sql datetime格式不处理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行的结果集,而不是函数返回的结果集。在标量结果中实际得到的是受影响行的计数值 看看这个关于过程和函数之间的区别
您需要做一些事情来选择函数的结果,以使execute scalar正常工作。ExecuteScalar需要一个1列1行的结果集,而不是函数返回的结果集。在标量结果中实际得到的是受影响行的计数值 看看这个关于过程和函数之间的区别
您需要做一些事情来选择函数的结果,以便执行标量工作。因为您正在处理日期。确保在将它们发送到SQL之前对其进行转换
Convert.ToDateTime(txt_1_aghaz.Text.ToString())
并确保您在SQL语句中接收的是日期,而不是NVARCHA50。因为您正在处理日期。确保在将它们发送到SQL之前对其进行转换
Convert.ToDateTime(txt_1_aghaz.Text.ToString())
并确保您在SQL语句中接收到的是日期,而不是nvarchar50。通过此更改完成:
SqlCommand Cmd=newsqlcommandselectdbo。dore1@First第二,cnn,
我们不能直接调用函数,它不是存储过程
完成通过此更改完成:
SqlCommand Cmd=newsqlcommandselectdbo。dore1@First第二,cnn,
我们不能直接调用函数,它不是存储过程
完成检查来自文本框的值是否正确传递,是否可转换为日期时间数据类型。e、 g.2013-08-17 11:40:59.0检查来自文本框的值是否正确传递,是否可转换为日期时间数据类型。e、 g.2013-08-17 11:40:59.0它与SQL中的字符一起工作。当我运行函数时,我们的日期与Gerogrian日期不同,因此我的参数不是日期。它是char,在SQL中与char一起工作。在SQL中与char一起工作。当我运行我的函数时,我们的日期与Gerogrian日期不同。我的参数不是date。它是char,它在sqlserver中与char一起工作你是说在我的函数中?My函数在SQL管理中工作并返回正确的值。但在这行dore1=Convert.ToInt32 Cmd.ExecuteScalar;例如,它不是返回值2,而是返回0是,但返回的值不同。执行scalar需要使用单行/单列结果进行选择。你是说在我的函数中?My函数在SQL管理中工作并返回正确的值。但在这行dore1=Convert.ToInt32 Cmd.ExecuteScalar;例如,它不是返回值2,而是返回0是,但返回的值不同。执行scalar需要使用单行/单列结果进行选择。My函数正确,并在SQL管理中运行。我认为c中有一个错误。我测试了你的建议,但它不起作用。我不是说你的函数在SMS中不起作用,我是说你的存储过程不能与c一起工作。你能展示一下你如何从ssms调用dore1吗?你能告诉我你在txt_1_aghaz.Text和txt_1_payan.Text1392/01/09和1392/02/30中有什么值吗?这是我的值。当我写Select@tedad时,我的函数将不会创建并显示SELECTIt done错误代码:SqlCommand Cmd=new SqlCommandSelect dbo。dore1@First第二,cnn,;我的函数是正确的,在SQL管理中运行。我认为c中有一个错误。我测试了你的建议,但它不起作用。我不是说你的函数在SMS中不起作用,我是说你的存储过程不能与c一起工作。你能展示一下你如何从ssms调用dore1吗?你能告诉我你在txt_1_aghaz.Text和txt_1_payan.Text1392/01/09和1392/02/30中有什么值吗?这是我的值。当我写Select@tedad时,我的函数不会创建
并显示SELECTIt done的错误代码:SqlCommand Cmd=new SqlCommandSelect dbo。dore1@First第二,cnn,;