@@ -500,7 +500,7 @@ private static string BuildParamDeclarations(IReadOnlyList<SqlParameter> paramet
500500 private static string SqlValueToTypeName ( SqlValue v ) => v switch {
501501 SqlValue . Bool => "BIT" , SqlValue . Int32 => "INT" , SqlValue . Int64 => "BIGINT" ,
502502 SqlValue . Float => "REAL" , SqlValue . Double => "FLOAT" , SqlValue . Decimal => "DECIMAL(38,10)" ,
503- SqlValue . Date => "DATETIME2 " , SqlValue . Uuid => "UNIQUEIDENTIFIER" , _ => "NVARCHAR(MAX)"
503+ SqlValue . Date => "DATETIME " , SqlValue . Uuid => "UNIQUEIDENTIFIER" , _ => "NVARCHAR(MAX)"
504504 } ;
505505
506506 private static void WriteAllHeaders ( BinaryWriter bw , long tx ) {
@@ -548,6 +548,22 @@ private static void WriteNamedParam(BinaryWriter bw, string name, SqlValue value
548548 case SqlValue . Text v :
549549 WriteNvarcharMaxTypeAndValue ( bw , v . Value ) ;
550550 break ;
551+ case SqlValue . Date v :
552+ bw . Write ( ( byte ) 0x6F ) ; // DATETIMN
553+ bw . Write ( ( byte ) 0x08 ) ; // Max length for DATETIME
554+ bw . Write ( ( byte ) 0x08 ) ; // Actual data length
555+ // Encode as DATETIME (8 bytes)
556+ var dt = v . Value ;
557+ var days = ( int ) ( dt . Date - new DateTime ( 1900 , 1 , 1 ) ) . TotalDays ;
558+ var ticks = ( int ) ( dt . TimeOfDay . TotalSeconds * 300 ) ;
559+ bw . Write ( days ) ;
560+ bw . Write ( ticks ) ;
561+ break ;
562+ case SqlValue . Uuid v :
563+ bw . Write ( ( byte ) 0x24 ) ; // UNIQUEIDENTIFIER
564+ bw . Write ( ( byte ) 0x10 ) ; // length
565+ bw . Write ( v . Value . ToByteArray ( ) ) ;
566+ break ;
551567 default :
552568 WriteNvarcharMaxTypeAndValue ( bw , value . AsString ( ) ) ;
553569 break ;
0 commit comments