SQL存储过程的.NET datetime问题

时间:2010-03-09 06:55:37

标签: c# .net sql

在安装了.NET 2.0的Windows XP计算机上执行应用程序时出现以下错误。在我的电脑上Windows 7 .NET 2.0 - 3.5我没有任何问题。目标SQL Server版本是2005.当我将datetime添加到存储过程时,会发生此错误。我一直在阅读有关使用.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 target)      在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)      at ReconHelper.getFilesInfo.InsertRecon(String computerName,Int32 EncryptState,TimeSpan FindTime,Int64 EncryptSize,DateTime timeWritten)      在ReconHelper.getFilesInfo.Main(String [] args)

2 个答案:

答案 0 :(得分:2)

您的本地方框是否使用SQL Server 2008,但另一个方框是2005? @RUNTIME参数是类型SqlDbType.Time。 SQL Server 2005中不存在该类型。如异常所示,SqlDbType.Time的值为32。您无法在sql server 2008之前存储时间值。您必须在2005年将@RUNTIME存储为SqlDbType.DateTime

答案 1 :(得分:0)

调试并查看发生的情况。我不认为这是DateTime。