Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中的SQL函数返回错误_C#_Function_Mysql Management_Executescalar - Fatal编程技术网

C# c中的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

我在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代码

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,;