2010-12-12 33 views
0

Bon, alors j'essaye de déclencher une erreur dans T-SQL (SQL-2000). Le code Sql de base ressemble à ceci. . . Mon code C++ managé dans VS2008 pour attraper le raiserror ressemble à ceci:Message de pertes Raiserror T-SQL si contient Datetime converti en Char (10)

declare @TmsString char(10), 
     @TmsLast datetime, 
     @UserMsg varchar(500) 

select @TmsLast = getdate() 

select @TmsString = ltrim(rtrim(convert(char(10), @TmsLast, 101))) 
select @UserMsg = '*' + ltrim(rtrim(cast(@TmsString as char))) + '*' 

raiserror (@UserMsg, 12, 1) 
return 

. .

System::Void Sql_ExecuteQuery (SqlCommand^sqlCommand, DataSet^OutDS, String^TableName) 
{ 
    SqlConnection ^sqlConnect ; 
    SqlDataAdapter^sqlDA ; 

    try 
    { 
     sqlDA = gcnew SqlDataAdapter() ; 

     sqlConnect = gcnew SqlConnection (_ConnString) ; 
     sqlConnect->Open() ; 

     sqlCommand->Connection = sqlConnect ; 

     sqlDA->SelectCommand = sqlCommand ; 
     sqlDA->Fill (OutDS, TableName) ; 
    } 
    catch (Exception^excp) 
    { 
     throw gcnew Exception (excp->Message->ToString()) ; 
    } 
    finally 
    { 
     sqlConnect->Close() ; 
    } 
} 

Maintenant, j'ai un point d'arrêt sur le catch dans le code "C++". Si le message raiserror inclut le datetime en tant que CHAR, le message excp-> est vide. Si j'enlève le datetime en tant que CHAR et envoie juste un message raiserror codé en dur tel que "Erreur arrive ici", alors le message excp-> est complet et rempli avec le message raiserror.

Est-ce que quelqu'un d'autre a vu ce type d'activité? Que puis-je faire de chaque côté de cet appel? . . c'est-à-dire, soit du côté SQL, soit du côté C++ pour obtenir cette chaîne datetime incluse dans le message raiserror ????

S'il vous plaît, aidez. Je suis coincé!

MERCI!

+0

Quel résultat voulez-vous voir? –

+0

En fin de compte, le message raiserror doit dire. . . "Employé Id 12345 Dernière connexion le 12.31.2010 8:33 AM". J'obtiens la valeur pour @TmsLast d'une requête à la table de connexion. Oui, je sais que le @TmsLast a une date valide parce que si je le retourne dans un ensemble de résultats, la valeur est remplie. Ce n'est pas avant que j'essaie de concaténer le datetime comme un char à un message raiserror que le le contenu de @TmsLast est "perdu". . . . AIDEZ-MOI !!!! –

Répondre

0

Ce que vous exécutez est

declare @UserMsg varchar(500) 
select @UserMsg = '*' + convert(char(10), getdate(), 101) + '*' 
raiserror (@UserMsg, 12, 1) 
return 

Je suppose que vous voulez concaténer un msg utilisateur en quelque sorte.

+0

En fin de compte, le message raiserror doit dire. . . "Employé Id 12345 Dernière connexion le 12.31.2010 8:33 AM". J'obtiens la valeur pour @TmsLast d'une requête à la table de connexion. Oui, je sais que le @TmsLast a une date valide parce que si je le retourne dans un ensemble de résultats, la valeur est remplie. Ce n'est pas avant que j'essaie de concaténer le datetime comme un char à un message raiserror que le le contenu de @TmsLast est "perdu". . . . AIDEZ-MOI !!!! –

+0

Je ne vois aucune variable où vous avez le message raiseerror –

+0

Est-ce que vous pensez à @TmsString, @TmsLast, @UserMsg comme paramètres qu'ils ne les considèrent pas comme des variables locales. Et il n'y a pas de place dans votre sql où vous pouvez concaténer quoi que ce soit, en plus de l'ajout du '*'. –