【发布时间】:2017-05-08 12:44:02
【问题描述】:
我在从 C# ASP.NET 应用程序 (MVC 3) 运行 SQL Server 2014 存储过程时遇到问题。 当我使用相同的参数手动运行此过程时,它会返回所有正确的结果。当从 C# 应用程序执行该过程时,“读取器”为空,没有任何数据。这似乎是 DateTime 格式的问题。我应该怎么做才能解决它? 代码如下:
SQL:
ALTER PROCEDURE [dbo].[my_proc]
(
@client_code AS varchar(7),
@begin_date AS datetime,
@end_date AS datetime
)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
from [dbo].[my_table] c
WHERE c.code = @client_code
AND c.date1 >= @begin_date
AND c.date2 <= @end_date
END
C#:
DateTime Today = DateTime.Today;
DateTime LastYear = Today.AddYears(-1);
sql = new SqlConnection(/*my string connection*/);
sql.Open();
adapter.SelectCommand = new SqlCommand();
adapter.SelectCommand.CommandText = "dbo.my_proc";
adapter.SelectCommand.Connection = sql;
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
param1 = adapter.SelectCommand.Parameters.Add("@client_code", SqlDbType.VarChar);
param1.Value = cod_client;
param2 = adapter.SelectCommand.Parameters.Add("@begin_date", SqlDbType.Date);
param2.Value = LastYear.ToString("yyyy-MM-dd");
param3 = adapter.SelectCommand.Parameters.Add("@end_date", SqlDbType.Date);
param3.Value = Today.ToString("yyyy-MM-dd");
reader = adapter.SelectCommand.ExecuteReader();
【问题讨论】:
-
.ToString("...")?不,你会有问题。如果您想删除时间部分,请使用SqlDbType.DateTime并使用Today.Date -
您期望 DateTime 类型的参数,为什么要将您完全适合的日期时间变量转换为字符串?
-
我担心C#和SQL Server的日期时间格式不匹配,所以我尝试通过toString方法来管理格式。
标签: c# asp.net asp.net-mvc datetime sql-server-2014