首页 > 解决方案 > MVC视图模型中的SQL查询

问题描述

我有以下标量值 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);
            }
        }
    }
}

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

提前致谢!

标签: c#sql-serverasp.net-mvcviewmodel

解决方案


@date1是必需的DateTime。相反,您将其传递为string. 修改函数并使其nvarchar与其他函数一样,或者执行以下操作:

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

推荐阅读