.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.

Другие вопросы по тегам