2010-03-09 2 views
1

.NET 2.0이 설치된 Windows XP 시스템에서 응용 프로그램을 실행할 때 아래 오류가 나타납니다. 내 컴퓨터에서 Windows 7 .NET 2.0 - 3.5 문제가 없습니다. 대상 SQL Server 버전은 2005입니다.이 오류는 datetime을 저장 프로 시저에 추가 할 때 발생하기 시작합니다. 나는 datetime을 사용하여 .NET datetime을 사용하는 것에 대해 많이 읽었으며 아직도 이것을 이해하지 못했습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 나는 그것을 감사 할 것입니다.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은 무효이다. 매개 변수 이름 : System.Data.SqlClient.SqlParameter..ctor에서 System.Data.SqlClient.SqlParameter.set_SqlDbType (SqlDbType 값) (문자열 경우 ParameterName에서 System.Data.SqlClient.MetaType.GetMetaTypeFromSqlDbType (SqlDbType 대상) 에서 SqlDbType ReconHelper.getFilesInfo에서 ReconHelper.getFilesInfo.InsertRecon (문자열 컴퓨터 이름, INT32 EncryptState, 타임 스팬 FindTime, INT64 EncryptSize, 날짜 시간 timeWritten) 에서 System.Data.SqlClient.SqlParameterCollection.Add (문자열 경우 ParameterName, SqlDbType sqlDbType) 에서, SqlDbType DBTYPE) .Main (String [] args)

+0

테이블 구조를 표시하고 원하는 값이 무엇인지 알려 주실 수 있습니까? 끼워 넣다? –

+0

@Runtime 및 @Encryptsize에 대한 DB 열 데이터 형식? –

답변

2

로컬 상자는 SQL Server 2008을 사용하지만 다른 상자는 2005입니까? @RUNTIME 매개 변수는 SqlDbType.Time입니다. SQL 서버 2005에는 해당 유형이 없습니다. SqlDbType.Time의 값은 32로되어 있습니다 (예외는 말합니다). SQL Server 2008 이전에는 시간 값을 저장할 수 없습니다. 2005 년에 @RUNTIME을 SqlDbType.DateTime으로 저장해야합니다.

+0

이 주석은 "@RUNTIME"SQL 데이터 유형이 nvarchar로 설정되었음을 깨닫게했습니다. 코드를 업데이트하고 나면 모든 것이 잘되었습니다. 감사. – DanO

0

디버그하고 이것이 어디에서 일어나는지보십시오. 나는 그것이 그것이 DateTime이라고 생각하지 않는다.