我正在将access 2003数据库升级到SQL Server Express 2008。表看起来创建得很好,数据看起来也很好。
我有一个连接到此数据库的MFC应用程序。连接到access可以很好地工作,但是当我连接到SQL Server时,我在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]返回的数据应该是8个字符,但只有7个字符,最右边的字符被截断了。
access前端可以正确读取SQL Server中的数据。
SQL Server表中的字段定义为长度为8的nvarchar。
读取该字段的代码如下所示
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);在此之后,sSerialNumber应为12345678,但其为1234567
谢谢你的帮助
发布于 2010-08-24 01:02:25
我同意这是与驱动相关的。引入{SQL Server}驱动程序是为了与SQL 2000一起使用。{SQL Native Client}随2005年而来。理想情况下,对于2008数据库,您应该使用最新的{SQL Server Native Client 10.0}。较新的驱动程序与较旧版本的SQL Server向后兼容。
发布于 2010-08-13 17:34:51
将驱动程序从"Driver={SQL Server};“更改为Driver={SQL Native Client};
已经解决了这个问题,但我不确定是怎么回事。我会继续调查的
发布于 2010-08-26 02:34:08
通过一些谷歌搜索,我了解到,显然,有时,特别是当在MS SQL Server ODBC驱动程序DSN设置对话框中选中“使用区域设置”时,ODBC会将由所有数字组成的字符串视为一个数字,并返回"12345678.00“,这与您指定的空格大小不匹配。解决方案是在对话框中或更永久地在连接字符串中关闭该设置:
CString sDsn = "Driver={SQL Server};Server=server\\db;Database=Boards;"
+"Uid=uid;Pwd=pwd;Trusted_Connection=False;Regional=No;"https://stackoverflow.com/questions/3458550
复制相似问题