Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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语句中设置值(datefirst)#_C#_Sql Server - Fatal编程技术网

C# 如何在C中的SQL语句中设置值(datefirst)#

C# 如何在C中的SQL语句中设置值(datefirst)#,c#,sql-server,C#,Sql Server,在C#中运行查询时,尝试设置DATEFIRST时遇到问题 首先,这是在SQLManagementStudio中工作的sql语句 SET DATEFIRST 1; GO CREATE VIEW [Tannery_Data_View2] AS SELECT [week_day] = DATENAME(dw, Tannery_Values.date), [week_ending] = DATEADD(DAY, 7-DATEPART(WEEKDAY, dbo.Tannery_Values.date),

在C#中运行查询时,尝试设置DATEFIRST时遇到问题

首先,这是在SQLManagementStudio中工作的sql语句

SET DATEFIRST 1;
GO

CREATE VIEW [Tannery_Data_View2] AS
SELECT [week_day] = DATENAME(dw, Tannery_Values.date), [week_ending] = DATEADD(DAY, 7-DATEPART(WEEKDAY, dbo.Tannery_Values.date), dbo.Tannery_Values.date), Tannery_Values.date, Tannery_Values.value, Variable_Titles.Variable, [Performance_Category] = Performance_Categories.Category, [Process_Category] = Process_Categories.Category
FROM Tannery_Values 
INNER JOIN Variable_Titles ON Tannery_Values.variableTitleID=Variable_Titles.VariableID
INNER JOIN Performance_Categories ON Tannery_Values.performanceCategoryID=Performance_Categories.CategoryID
INNER JOIN Process_Categories ON Tannery_Values.processCategoryID=Process_Categories.CategoryID
这是我调用它的代码

public void executeNonQuery(string insertString)
        {
            sqlConnection.Open();
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = insertString;
            command.Connection = sqlConnection;
            command.ExecuteNonQuery();
            sqlConnection.Close();
        }
插入字符串是上面注释为字符串的sql语句。它抛出一个错误,即CREATE视图必须是批处理中的第一条语句。随后,我尝试使用create view SEparate将其分成两个查询,与set语句分开,但也不起作用。我的理解是ExecuteOnQuery不是这里使用的正确方法,因为计算机忘记了它已经设置好了?然而,我似乎找不到我真正需要做的事情


如果更简单的话,我可以运行一个存储过程并调用它,但我想知道我做错了什么。特别是因为我不容易找到答案,所以最好把它放在这里给别人

不能在视图中使用
SET DATEFIRST

可能最简单的方法是在运行视图之前在C#中生成它

cmd.CommandText = "SET DATEFIRST 1";
cmd.ExecuteNonQuery();
或者,实现这一目标的最佳方法是建立一个日期表


将一周的第一天设置为星期一后,您使用的SQL将创建一个视图。这没有意义,因为视图在实际运行时不会保留DATEFIRST设置

是否确实不希望DATEFIRST成为正在创建的视图的一部分

CREATE VIEW [Tannery_Data_View2] AS
SET DATEFIRST 1;
GO

SELECT [week_day] = DATENAME(dw, Tannery_Values.date), [week_ending] = DATEADD(DAY, 7-DATEPART(WEEKDAY, dbo.Tannery_Values.date), dbo.Tannery_Values.date), Tannery_Values.date, Tannery_Values.value, Variable_Titles.Variable, [Performance_Category] = Performance_Categories.Category, [Process_Category] = Process_Categories.Category
FROM Tannery_Values 
INNER JOIN Variable_Titles ON Tannery_Values.variableTitleID=Variable_Titles.VariableID
INNER JOIN Performance_Categories ON Tannery_Values.performanceCategoryID=Performance_Categories.CategoryID
INNER JOIN Process_Categories ON Tannery_Values.processCategoryID=Process_Categories.CategoryID
或者您不只是想运行查询:

SET DATEFIRST 1;
GO

SELECT [week_day] = DATENAME(dw, Tannery_Values.date), [week_ending] = DATEADD(DAY, 7-DATEPART(WEEKDAY, dbo.Tannery_Values.date), dbo.Tannery_Values.date), Tannery_Values.date, Tannery_Values.value, Variable_Titles.Variable, [Performance_Category] = Performance_Categories.Category, [Process_Category] = Process_Categories.Category
FROM Tannery_Values 
INNER JOIN Variable_Titles ON Tannery_Values.variableTitleID=Variable_Titles.VariableID
INNER JOIN Performance_Categories ON Tannery_Values.performanceCategoryID=Performance_Categories.CategoryID
INNER JOIN Process_Categories ON Tannery_Values.processCategoryID=Process_Categories.CategoryID
更新:

进一步检查后,SQL Server不允许在视图中使用DATEFIRST。我使用路德·米勒的理论()使用@@DateFirst计算周数

SELECT [week_day] = DATENAME(dw, Tannery_Values.date), 
    [week_ending] = DATEADD(DAY, 7-DATEPART(WEEKDAY, ((@@DATEFIRST - 1) % 7) + 1), dbo.Tannery_Values.date), 
    Tannery_Values.date, Tannery_Values.value, Variable_Titles.Variable, 
    [Performance_Category] = Performance_Categories.Category, [Process_Category] = Process_Categories.Category
FROM Tannery_Values 
INNER JOIN Variable_Titles ON Tannery_Values.variableTitleID=Variable_Titles.VariableID
INNER JOIN Performance_Categories ON Tannery_Values.performanceCategoryID=Performance_Categories.CategoryID
INNER JOIN Process_Categories ON Tannery_Values.processCategoryID=Process_Categories.CategoryID

仍然从第一个错误中获取错误。它说单词set附近的语法不正确。有一件奇怪的事情说你不能在视图中使用DATEFIRST,我找不到任何理由。因为您只需要一次计算,所以我使用了Luhter Miller的Throry()-请参见上面的编辑。