“La chaîne de données, troncature” avertissement sur une instruction select
Je suis upscaling une base de données access 2003 pour SQL Server Express 2008. Les tableaux semblent être ok créé et les données semblent ok.
J'ai une application MFC qui se connecte à cette base de données. Il a bien fonctionné connexion d'accès, mais lorsque je me connecte à SQL Server, j'obtiens l'erreur suivante sur une instruction select.
DBMS: Microsoft SQL Server
Version: 10.50.1600
ODBC Driver Manager Version: 03.80.0000
Warning: ODBC Success With Info on field 0.
String data, right truncation
State:01004,Native:0,Origin:[Microsoft][ODBC SQL Server Driver]
Les données renvoyées devrait être de 8 caractères, mais est à seulement 7 avec le droit de la plupart des caractères tronqués.
L'accès frontal peut lire les données à partir de SQL Server correctement.
Le champ dans la table SQL Server est défini comme étant de type nvarchar avec une longueur de 8.
Le code pour lire le champ ressemble à quelque chose comme
CDatabase Database;
CString sSerialNumber = "00000000";
CString SqlString;
CString sDsn = "Driver={SQL Server};Server=server\\db;Database=Boards;Uid=uid;Pwd=pwd;Trusted_Connection=False";
Database.Open(NULL,false,false,sDsn);
CRecordset recset( &Database );
SqlString.Format("Select SerialNumber from boards where MACAddress = '%s'",mac);
recset.Open(CRecordset::forwardOnly,SqlString,CRecordset::readOnly);
recset.GetFieldValue("SerialNumber",sSerialNumber);
Après cela, sSerialNumber devrait être 12345678 mais son 1234567
Merci pour l'aide
Quel est le bounty? Pour le faire fonctionner sans le nouveau pilote? Pourquoi quelqu'un voudrait-il faire?
OriginalL'auteur JonDrnek | 2010-08-11
Vous devez vous connecter pour publier un commentaire.
Je serai d'accord que c'est du pilote connexes. Le {SQL Server} pilote a été introduit pour une utilisation avec SQL 2000. {SQL Native Client} est venu à 2005. Idéalement, pour l'année 2008 de la base de données, vous devez utiliser le nouveau {SQL Server Native Client 10.0}. Les pilotes les plus récents sont rétro-compatibles avec les anciennes versions de SQL Server.
OriginalL'auteur Joe Stefanelli
Changer mon permis de
"Driver={SQL Server};"
pour
Driver={SQL Native Client};
a rendu le problème de s'en aller, mais je ne suis pas sûr de ce qui se passait. Je vais continuer à chercher en elle
OriginalL'auteur JonDrnek
À partir d'un peu de Googling, j'ai appris que apparemment, à la fois, en particulier lorsque l'option "Utiliser les Paramètres Régionaux" est cochée dans la MS SQL Server pilote ODBC DSN dialogue installation ODBC permettra de traiter une chaîne de caractères composée de tous les chiffres, comme un certain nombre, et de la retourner comme "12345678.00" qui ne rentre pas dans l'espace que vous avez donné. La solution est de se tourner que la mise hors tension, soit dans la boîte de dialogue, ou, de façon plus permanente, dans la chaîne de connexion:
OriginalL'auteur James Curran
Si vous devez absolument creuser vers le bas de cette, faire un minimum de procédure stockée ", sélectionnez" local var défini comme varchar(17) - n'importe quelle taille plus de 2 fois votre taille d'origine ne pourra le faire. Maintenant appeler la procédure stockée à la place de SQL dynamique et de voir ce qui revient. Ensuite, vous pouvez répéter l'opération avec exactement la même taille (de type nvarchar(8)). Votre petit la procédure stockée sert aussi simple de carte de données et de stabiliser le taper si l'ancien pilote a tendance à se confondre - comme beaucoup plus facile de jongler avec la définition de la table.
Vérifiez également si il ya un param/propriété sur inreface/connexion classes de spécifier l'encodage des caractères et assurez-vous que c'est de l'unicode (utf-16). Je suppose que votre code sera compilé pour l'unicode. Si non, vous devez prendre une décision sur ce premier (N Nvarchar signifie unicode, sinon il serait juste varchar). Vous avez certainement besoin de codage de caractères appariés sur les deux côtés ou vous avez d'autres des erreurs.
OriginalL'auteur ZXX