【问题标题】:SQL query in View Model of MVCMVC视图模型中的SQL查询
【发布时间】:2020-12-10 15:26:01
【问题描述】:

我有以下标量值 SQL Server 函数:

CREATE FUNCTION [dbo].[udf_Share] 
    (@date1 datetime, 
     @date2 nvarchar(max), 
     @date3 nvarchar(max) )
RETURNS bit
AS
BEGIN
    DECLARE @date2_ datetime = CAST(@date2 AS datetime)
    DECLARE @date3_ datetime = CAST(@date3 AS datetime)

    RETURN (SELECT
                CASE
                    WHEN (@date1 < @date3_ AND @date2_ >= @date3_) OR
                         (@date2_ < @date3_ AND @date1 >= @date3_)
                       THEN 1
                       ELSE 0 
                END)
END

还有以下视图模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;


namespace TestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string connString = @"Server =.\SQL2K17; Database = SampleDB; Trusted_Connection = True;"; 

            try
            {
                using (SqlConnection conn = new SqlConnection(connstring))
                {
                    string query = @"SELECT dbo.udf_Share(@date1, @date2, @date3); ";
                    SqlCommand cmd = new SqlCommand(query, conn);
                    cmd.Parameters.Add(new SqlParameter("@date1", "01/01/2016"));
                    cmd.Parameters.Add(new SqlParameter("@date2", "01/01/2021"));
                    cmd.Parameters.Add(new SqlParameter("@date3", "01/10/2019"));
                    conn.Open();
                    var objectResult = cmd.ExecuteScalar();
                    int Result = Convert.ToInt32(objectResult);
                    Console.WriteLine(Result.ToString());
                    conn.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: " + ex.Message);
            }
        }
    }
}

正在建立连接,但我无法使用该功能。也许我没有正确传递参数。我做错了什么?

提前致谢!

【问题讨论】:

  • 第一行有语法错误。您发送的是“@effdate2”,但请求的是“@date2”。

标签: c# sql-server asp.net-mvc viewmodel


【解决方案1】:

@date1DateTime 所必需的。相反,您将其传递为string。修改函数并使其像其他函数一样 nvarchar,或者这样做:

SqlParameter parameter1 = cmd.Parameters.Add("@date1", System.Data.SqlDbType.DateTime);
parameter1.Value = _your_datetime_value_;

【讨论】:

  • 您也可以使用 AddWithValue() 将每个参数缩短一行。 DateTime.Parse() 也会从您的字符串中正确设置日期。
【解决方案2】:

你的sql函数应该是这样的:

CREATE FUNCTION [dbo].[udf_Share] (@date1 nvarchar(max), @date2 nvarchar(max), @date3 nvarchar(max) )
RETURNS bit
AS
BEGIN
declare @date1_ datetime=cast(@date1 as datetime)
declare @date2_ datetime=cast(@date2 as datetime)
declare @date3_ datetime=cast(@date3 as datetime)
  RETURN (SELECT
    CASE
      WHEN (@date1_ < @date3_ AND @date2_ >= @date3_) OR
           (@date2_ < @date3_ AND @date1_ >= @date3_)
       THEN 1
      ELSE 0
    END)
END

【讨论】:

  • 已编辑。谢谢!但问题不同。
  • @edith 编辑了我的答案。请试试这个。
  • 感谢您的帮助!
猜你喜欢
  • 2017-02-08
  • 1970-01-01
  • 2022-01-10
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
相关资源
最近更新 更多