2010-03-09 6 views
1

Я получаю следующую ошибку при выполнении моего приложения на компьютере под управлением Windows XP с установленным .NET 2.0. На моем компьютере Windows 7 .NET 2.0 - 3.5 У меня нет никаких проблем. Целевая версия сервера SQL - 2005. Эта ошибка началась, когда я добавил дату и время в хранимую процедуру. Я много читал об использовании .NET datetime с SQL datetime, и я до сих пор не понял этого. Если кто-то может указать мне в правильном направлении, я был бы признателен.Ошибка .NET datetime с хранимой процедурой SQL

Здесь я верю, что ошибка исходит.

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 (String ParameterName , SqlDbType DbType) в System.Data.SqlClient.SqlParameterCollection.Add (String ParameterName, SqlDbType SqlDbType) в ReconHelper.getFilesInfo.InsertRecon (String, Int32 COMPUTERNAME EncryptState, TimeSpan FindTime, Int64 EncryptSize, DateTime TimeWritten) в ReconHelper.getFilesInfo .Main (String [] args)

+0

Можете ли вы показать нам структуру таблицы и рассказать нам, какое значение имеет значение eDateTime, которое вы используете для вставить? –

+0

Тип данных столбца DB для @Runtime и @Encryptsize? –

ответ

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

0

Отладить и посмотреть, где это происходит. Я не думаю, что это DateTime.

Смежные вопросы