我有一個存儲過程來插入記錄並返回插入記錄的ID。ExecuteNonQuery()帶日期插入的異常
這是我的SQL執行:
ALTER PROCEDURE InsertViolation
@FactoryName nvarchar(50) ,
@Type nvarchar(100),
@Location nvarchar(30) ,
@Desc nvarchar(300),
@Severity nvarchar(300),
@DateObserved datetime,
@ViolationNumber bigint output
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Violation
(Violation_Factory_Name
,Violation_Type
,Violation_Location
,Violation_Desc
,Violation_Severity
,Violation_Date_Observed)
VALUES
(@FactoryName
,@Type
,@Location
,@Desc
,@Severity
,@DateObserved)
SET @ViolationNumber=SCOPE_IDENTITY()
RETURN @ViolationNumber
END
和我有這個C#代碼來調用這個程序:
public static long Insert_Violation(Model.Violation violation)
{
string strStoredProcedureName = "InsertViolation";
SqlCommand cmd = new SqlCommand(strStoredProcedureName);
string strConnString = ConfigurationManager.ConnectionStrings["ViolationConnection"].ConnectionString;
SqlConnection con = new SqlConnection(strConnString);
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@FactoryName", violation.FactoryName);
cmd.Parameters.AddWithValue("@Type", violation.ViolationType);
cmd.Parameters.AddWithValue("@Location", violation.Location);
cmd.Parameters.AddWithValue("@Desc", violation.ViolationDesc);
cmd.Parameters.AddWithValue("@Severity", violation.Serverity);
cmd.Parameters.AddWithValue("@DateObserved", violation.DateObserved);
cmd.Parameters.AddWithValue("@ViolationNumber", -1).Direction = ParameterDirection.Output;
try
{
con.Open();
cmd.ExecuteNonQuery();
return (long) cmd.Parameters["@ViolationNumber"].Value;
}
catch(Exception ex)
{
throw new Exception(ex.Message + " Date Parameter value is " + cmd.Parameters["@DateObserved"].Value + " \n DateTime Object converted to string value is " + violation.DateObserved.ToString());
return -1;
}
finally
{
con.Dispose();
cmd.Dispose();
}
}
我發現該行已經插入到數據庫中,但會拋出異常在cmd.ExecuteNonQuery();
問題是我用的是violation.DateObserved
這是C#DateTime
對象和相應的參數和字段在DB中是datetime
這裏是捕捉到的異常信息,我用拋出異常來打印:
的System.Exception:指定的轉換無效。日期參數值15/12/2012 12:00:00 DateTime對象轉換爲字符串值15/12/2012 12:00:00
所以我不能得到備案號,而不是我的函數返回-1,因爲捕獲被訪問。
數據庫中該字段的數據類型是什麼?看起來像你有一個日期轉換問題你不能做一個'var viodate = string.Format(「mm/dd/yyyy hh:mm:ss」,violation.DateObserved)' – MethodMan
@DJ該參數聲明爲日期時間:它應該作爲日期時間傳遞 - 不是字符串 –
他說,數據庫中的相應字段是datetime類型的。 –