2009-08-16 25 views
1

Ich habe ein Problem beim Einfügen einer Datetime-Format-Variable in Sql Server 2005-Datenbank. Datetime-Format ist dd.MM.yyyyEinfügen von DateTime in Sql Server 2005

conn.Open(); 

       string conString = "SET DATEFORMAT DMY INSERT INTO AmortPlanT (InvestmentID,StartDate,Maturity,IRate,CoupPerYear,parValue) Values (@IIndex,'@StartDate','@Maturity',@IRate,@CouponPerYear,@parValue)"; 

       using (SqlCommand myCommand = new SqlCommand(conString, conn)) 
       { 
        myCommand.CommandType = CommandType.Text; 
        myCommand.Parameters.Add("@IIndex", SqlDbType.Int).Value = investmentIndex; 
        myCommand.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = startDate; 
        myCommand.Parameters.Add("@Maturity", SqlDbType.DateTime).Value = maturity; 
        myCommand.Parameters.Add("@IRate", SqlDbType.Float).Value = iRate; 
        myCommand.Parameters.Add("@CouponPerYear", SqlDbType.Int).Value = coupPerYear; 
        myCommand.Parameters.Add("@parValue", SqlDbType.Float).Value = parValue; 

        myCommand.ExecuteNonQuery(); 

       } 

Startdatum und Laufzeit sind Datetime-Variablen i von dateTimePicker.Value erhalten.

Und ich erhalte immer die Fehlermeldung:

Fehler bei der Konvertierung, wenn Datetime von Zeichenfolge zu konvertieren.

Vielen Dank für Ihre Hilfe.

Antwort

2

Sie sollen nicht Ihre Parameter in Anführungszeichen setzen .. hier ist die richtige Abfrage ..

‚@StartDate‘ in Werte Klausel falsch ist, sollte es nur @StartDate sein ... wie weiter unten erläutert. ..

conn.Open(); 
    string conString = "SET DATEFORMAT DMY INSERT INTO AmortPlanT 
(InvestmentID,StartDate,Maturity,IRate,CoupPerYear,parValue) Values 
(@IIndex,@StartDate,@Maturity,@IRate,@CouponPerYear,@parValue)";     
using (SqlCommand myCommand = new SqlCommand(conString, conn)) 
    {      
    myCommand.CommandType = CommandType.Text;      
    myCommand.Parameters.Add("@IIndex", SqlDbType.Int).Value = investmentIndex;      
    myCommand.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = startDate;      
    myCommand.Parameters.Add("@Maturity", SqlDbType.DateTime).Value = maturity;      
    myCommand.Parameters.Add("@IRate", SqlDbType.Float).Value = iRate;     myCommand.Parameters.Add("@CouponPerYear", SqlDbType.Int).Value = coupPerYear;      
myCommand.Parameters.Add("@parValue", SqlDbType.Float).Value = parValue;     myCommand.ExecuteNonQuery();     
} 
1

Das Problem ist, dass Sie in Bezug auf die Saiten ...

DateTime Format is dd.MM.yyyy

Nein denken, es ist nicht; Das Format einer DateTime (wenn als Parameter übergeben) ist eigentlich nur eine Zahl als binäre; -p (startDate sollte eine DateTime - keine string sein).

Wenn Sie Parameter verwenden, können Sie nicht die Zeichenfolge-Token (') enthalten - sonst meinen Sie „die Zeichenfolge '@name'“, sondern als „die Zeichenfolge @name in Parameter gehalten“; versuchen Sie, sie zu entfernen:

string conString = @" 
SET DATEFORMAT DMY INSERT INTO AmortPlanT (InvestmentID,StartDate,Maturity,IRate,CoupPerYear,parValue) 
VALUES (@IIndex,@StartDate,@Maturity,@IRate,@CouponPerYear,@parValue)";