.NET datetime проблема с хранимой процедурой SQL
Я получаю приведенную ниже ошибку при выполнении приложения на компьютере с Windows XP с установленным.NET 2.0. На моем компьютере Windows 7 .NET 2.0 - 3.5 У меня нет никаких проблем. Целевая версия SQL-сервера - 2005. Эта ошибка возникла, когда я добавил дату и время в хранимую процедуру. Я много читал об использовании.NET datetime с SQL 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, значение-аргумента (SqlDqType) в System.Data.SqlClient.SqlParameterCollection.Add (String parameterName, SqlDbType sqlDbType) в ReconHelper.getFilesInfo.InsertRecon (строковое имя_компьютера, Int32 EncryptState, TimeSpan FindTime, Int64, шифрование в реальном времени.)
2 ответа
Использует ли ваш локальный компьютер SQL Server 2008, а другой - 2005? Параметр @RUNTIME имеет тип SqlDbType.Time
, Этот тип не существовал в SQL Server 2005. Также SqlDbType.Time
имеет значение 32, как говорит исключение. Вы не можете хранить только значения времени до SQL Server 2008. Вы должны хранить @RUNTIME как SqlDbType.DateTime
в 2005 году.
Отладьте и посмотрите, где это происходит. Я не думаю, что это DateTime.