1

SQL Server ストアド プロシージャを使用して、C# 経由でデータベースにデータを格納しています。SQL Server Management Studio 内からストアド プロシージャを実行すると機能しますが、C# で行を挿入しようとすると失敗し、理由がわかりません。最初はDATETIMEストアド プロシージャの型を取得するのに問題がありましたが、CAST を使用すると機能するようになりました。C# から値を文字列として渡すことも試みDateTimeましたが、これも機能しません!?

私のSPは以下です。

ALTER PROCEDURE [dbo].[SaveFlightInfo]
(
        @FlightInfoID int,
        @AirportFrom varchar(5),
        @AirportTo varchar(5),
        @TimeDeparture datetime,
        @TimeArrival datetime,
        @Price float,
        @DateAdded datetime,
        @Carrier varchar(30),
        @Url varchar(300)

)

AS

DECLARE @sql as varchar(1000)


--If the primary key is zero then insert new record
IF ( @FlightInfoID = 0) BEGIN
DECLARE @sql3 as varchar(1000)
SET @sql ='
INSERT INTO '+@AirportFrom+'
(AirportFrom,
AirportTo,
TimeDeparture,
TimeArrival,
Price,
DateAdded,
Carrier,
Url)

 VALUES ('''+@AirportFrom+''',
'''+@AirportTo+''',
CAST('''+CAST(@TimeDeparture as varchar(50))+''' as DATETIME),
CAST('''+CAST(@TimeArrival as varchar(50))+''' as DATETIME),
CAST('''+CAST(@Price as varchar(10))+''' as FLOAT),
CAST('''+CAST(@DateAdded as varchar(50))+''' as DATETIME),
'''+@Carrier+''',
'''+@Url+''')

'
    END
    EXEC(@sql)

私のC#コードは以下の通りです:

   Database db = DatabaseFactory.CreateDatabase("DBConnectionString");
        DbCommand dbCommand = db.GetStoredProcCommand("SaveFlightInfo");

        db.AddInParameter(dbCommand, "FlightInfoID", DbType.Int32, flightInfoID);
        db.AddInParameter(dbCommand, "AirportFrom", DbType.String, airportFrom);
        db.AddInParameter(dbCommand, "AirportTo", DbType.String, airportTo);
        db.AddInParameter(dbCommand, "TimeDeparture", DbType.DateTime, timeDeparture);
        db.AddInParameter(dbCommand, "TimeArrival", DbType.DateTime, timeArrival);
        db.AddInParameter(dbCommand, "Price", DbType.Int16, price);
        db.AddInParameter(dbCommand, "DateAdded", DbType.DateTime, dateAdded);
        db.AddInParameter(dbCommand, "Carrier", DbType.String, carrier);
        db.AddInParameter(dbCommand, "Url", DbType.String, url);

        IDataReader dr = db.ExecuteReader(dbCommand);
4

1 に答える 1