我有一個存儲過程更新表中的一行。 我使用C#到所有的參數傳遞到這樣的存儲過程:SQL Server日期格式不適用於存儲過程
public int editFestival(String festId, String festNaam, String festLocatie, String festDatum,
String festDuur, String festEindDatum, String festUrl)
{
sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["project"].ConnectionString);
sqlCommand = new SqlCommand("EditFestival", sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@festId", Convert.ToInt32(festId)));
sqlCommand.Parameters.Add(new SqlParameter("@festNaam", festNaam));
sqlCommand.Parameters.Add(new SqlParameter("@festLocatie", festLocatie));
sqlCommand.Parameters.Add(new SqlParameter("@festDatum", Convert.ToDateTime(festDatum)));
//Also tried -> , SqlDbType.date)).Value = festDatum
sqlCommand.Parameters.Add(new SqlParameter("@festDuur", Convert.ToInt32(festDuur)));
sqlCommand.Parameters.Add(new SqlParameter("@festEindDatum", Convert.ToDateTime(festEindDatum)));
sqlCommand.Parameters.Add(new SqlParameter("@festUrl", festUrl));
sqlConnection.Open();
sqlTransaction = sqlConnection.BeginTransaction();
sqlCommand.Transaction = sqlTransaction;
rows = sqlCommand.ExecuteNonQuery();
sqlTransaction.Commit();
return rows;
}
雖然字符串festDatum(這意味着festDate英文)處於正確的格式(YYYY-MM-DD)它不是被存儲過程接受。
當我用我自己給變量執行存儲過程,這是它產生:
USE [groep2_festivals]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[EditFestival]
@festId = 1,
@festNaam = N'Rock Werchter',
@festLocatie = N'Werchter - Belge',
@festDatum = 2013-07-01, --This is where it says that there's a syntax error near '-'
@festDuur = 4,
@festEindDatum = 2013-07-04,
@festUrl = N'www.rockwerchter.be'
SELECT 'Return Value' = @return_value
GO
當我手動環繞單引號兩個日期,它工作正常。 我在做什麼錯?或者它會像用單引號圍繞更新語句中的參數一樣簡單?
編輯:這是原來的存儲過程(應該已經張貼了這個更早)
USE [groep2_festivals]
GO
/****** Object: StoredProcedure [dbo].[EditFestival] Script Date: 10/05/2013 12:44:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Robbie Vercammen
-- Create date: 10/05/2013
-- Description: Veranderd de gegevens van een bepaald festival
-- =============================================
CREATE PROCEDURE [dbo].[EditFestival]
(
@festId int,
@festNaam nvarchar(255),
@festLocatie nvarchar(255),
@festDatum date,
@festDuur int,
@festEindDatum date,
@festUrl nvarchar(255)
)
AS
BEGIN
SET NOCOUNT ON;
UPDATE festivals
SET fest_naam = @festNaam, fest_locatie = @festLocatie, fest_datum = @festDatum,
fest_duur = @festDuur, fest_einddatum = @festEindDatum, fest_url = @festUrl
WHERE fest_id = @festid
END
編輯:我試圖 我從Management Studio中執行存儲過程
生成的代碼已在上面發佈;) 執行時,它只是說
Msg 102,Level 15,State 1,Line 8
「 - 」附近的語法不正確。
你說 - 「它不被存儲過程接受」。介意解釋到底是什麼意思? – Oded 2013-05-11 20:11:15
至於在SSMS中執行SQL - 您需要在SSMS中使用日期文字。 '2013-07-01'不是日期文字。改用「2013-07-01」。這不是參數化版本(帶日期)的問題。這假定您正在使用查詢窗口來運行查詢。 – Oded 2013-05-11 20:12:34
'Convert.ToDateTime(festDatum)'真的會給你一個類型爲'DateTime'的有效對象嗎? – Corak 2013-05-11 20:13:56