2010-03-09 168 views
1

在安裝了.NET 2.0的Windows XP計算機上執行我的應用程序時,出現以下錯誤。在我的電腦上Windows 7 .NET 2.0 - 3.5我沒有任何問題。目標SQL服務器版本是2005.當我將日期時間添加到存儲過程時,發生此錯誤。我一直在閱讀關於使用.NET日期時間和SQL日期時間的很多內容,但我仍然沒有想到這一點。如果有人能指出我正確的方向,我將不勝感激。SQL存儲過程的.NET datetime問題

這裏是我相信錯誤來自哪裏。

private static void InsertRecon(string computerName, int EncryptState, TimeSpan FindTime, Int64 EncryptSize, DateTime timeWritten) 
{ 
    SqlConnection DBC = new SqlConnection("server=server;UID=InventoryServer;Password=pass;database=Inventory;connection timeout=30"); 
    SqlCommand CMD = new SqlCommand(); 
    try 
    { 
     CMD.Connection = DBC; 
     CMD.CommandType = CommandType.StoredProcedure; 

     CMD.CommandText = "InsertReconData"; 
     CMD.Parameters.Add("@CNAME", SqlDbType.NVarChar); 
     CMD.Parameters.Add("@ENCRYPTEXIST", SqlDbType.Int); 
     CMD.Parameters.Add("@RUNTIME", SqlDbType.Time); 
     CMD.Parameters.Add("@ENCRYPTSIZE", SqlDbType.BigInt); 
     CMD.Parameters.Add("@TIMEWRITTEN", SqlDbType.DateTime); 

     CMD.Parameters["@CNAME"].Value = computerName; 
     CMD.Parameters["@ENCRYPTEXIST"].Value = EncryptState; 
     CMD.Parameters["@RUNTIME"].Value = FindTime; 
     CMD.Parameters["@ENCRYPTSIZE"].Value = EncryptSize; 
     CMD.Parameters["@TIMEWRITTEN"].Value = timeWritten; 

     DBC.Open(); 
     CMD.ExecuteNonQuery(); 
    } 
    catch (System.Data.SqlClient.SqlException e) 
    { 
     PostMessage(e.Message); 
    } 
    finally 
    { 
     DBC.Close(); 
     CMD.Dispose(); 
     DBC.Dispose(); 
    } 
} 

未處理的異常信息:System.ArgumentOutOfRangeException:本SqlDbType枚舉值,32,是無效的。 參數名稱:SqlDbType 在System.Data.SqlClient.MetaType.GetMetaTypeFromSqlDbType(SqlDbType目標) 在System.Data.SqlClient.SqlParameter.set_SqlDbType(SqlDbType值) 在System.Data.SqlClient.SqlParameter..ctor(字符串參數名稱,SqlDbType DBTYPE) 在System.Data.SqlClient.SqlParameterCollection.Add(字符串參數名稱,SqlDbType sqlDbType) 在ReconHelper.getFilesInfo.InsertRecon(字符串COMPUTERNAME,的Int32 EncryptState,時間跨度FindTime,Int64類型EncryptSize,日期時間timeWritten) 在ReconHelper.getFilesInfo .Main(String [] args)

+0

您可以向我們顯示錶結構,並告訴我們您嘗試訪問的eDateTime的值插? – 2010-03-09 07:02:40

+0

@Runtime和@Encryptsize的數據庫列數據類型? – 2010-03-09 07:04:00

回答

2

您的本地盒子是否使用SQL Server 2008,但其他盒子是2005? @RUNTIME參數的類型爲SqlDbType.Time。該類型在SQL Server 2005中不存在。另外SqlDbType.Time的值爲32,如異常所述。您不能在sql server 2008之前存儲時間值。您必須在2005年將@RUNTIME存儲爲SqlDbType.DateTime

+0

此評論讓我意識到「@RUNTIME」SQL數據類型已設置爲nvarchar。一旦我更新了代碼,一切都很好。謝謝。 – DanO 2010-03-10 00:23:46

0

調試並查看發生了什麼。我不認爲這是DateTime。