简体   繁体   English

SQL Server 2008 datetime不会通过c#插入,但可以在SQL Server Management Studio中使用吗?

[英]SQL Server 2008 datetime will not insert via c# but works within SQL Server Management Studio?

I am using an SQL Server stored procedure to put data into a database via C#. 我正在使用SQL Server存储过程通过C#将数据放入数据库。 When I run the stored procedure from within SQL Server Management Studio it works but when I try to insert the row with C# it fails and I cannot find out why. 当我从SQL Server Management Studio中运行存储过程时,它可以工作,但是当我尝试使用C#插入行时,它失败了,我无法找出原因。 I initially had trouble getting with the DATETIME type in the stored procedure but now that works when I use CAST. 最初,我在使用存储过程中的DATETIME类型时遇到了麻烦,但是现在当我使用CAST时可以使用。 I have also tried passing the DateTime values in as strings from C# but this does not work either!? 我也尝试过将C#中的DateTime值作为字符串传递,但这也不起作用!

My SP is below: 我的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)

My C# code is below: 我的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);

Also you can use sp_executesql system stored procedure with parameters 您还可以将sp_executesql系统存储过程与参数一起使用

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, @TimeDeparture, @TimeArrival, @Price, @DateAdded, @Carrier, @Url)'
END
EXEC sp_executesql @sql, N'@AirportFrom varchar(5), 
                           @AirportTo varchar(5), 
                           @TimeDeparture datetime,
                           @TimeArrival datetime, 
                           @Price float, 
                           @DateAdded datetime, 
                           @Carrier varchar(30), 
                           @Url varchar(300)', @AirportFrom,
                                               @AirportTo,
                                               @TimeDeparture,
                                               @TimeArrival,
                                               @Price,
                                               @DateAdded,
                                               @Carrier,
                                               @Url

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM