FIX: إرجاع SQLColAttribute سمات الجدول غير صحيح عند اسم الجدول يحتوي على الفترة

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية290646
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
BUG #: 46409 (SHILOH_bug)
الخطأ رقم: 56030 (sqlbug_70)
الأعراض
عند استخدام دالة SQLColAttribute لإرجاع معلومات واصف SQL_DESC_SCHEMA_NAME أو SQL_DESC_TABLE_NAME SQL_DESC_BASE_TABLE_NAME أو SQL_DESC_CATALOG_NAME قد يتم إرجاع قيم غير صحيحة عند اسم جدول يحتوي على نقطة.
السبب
يستخدم ODBC الفترات لتحديد الكائنات SQL Server في تنسيق Computer.Database.Owner.Object.
الحل

SQL Server 2000

لحل هذه المشكلة، يجب الحصول على أحدث حزمة خدمة لـ Microsoft SQL Server 2000. للحصول على معلومات إضافية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
290211INF: كيفية الحصول على أحدث حزمة خدمة لبرنامج SQL Server 2000

SQL Server 7.0

كمحاولة للتغلب على هذه المشكلة لا تستخدم فترات ضمن الأسماء الكائنات SQL Server.

Microsoft Data Access Components (MDAC)

لحل هذه المشكلة، يجب الحصول على أحدث حزمة خدمة لـ Microsoft بيانات Access مكونات 2.6. للحصول على معلومات إضافية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
300635INFO: كيفية الحصول على أحدث MDAC 2.6 حزمة الخدمات
تصريح
أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في بداية هذه المقالة.

SQL Server 2000

تم تصحيح هذه المشكلة لأول مرة في SQL Server 2000 Service Pack 1.

Microsoft Data Access Components (MDAC)

تم تصحيح هذه المشكلة لأول مرة في Microsoft بيانات Access مكونات 2.6 المزود بحزمة الخدمة Service Pack 1.
معلومات أخرى

خطوات إعادة إنشاء السلوك

  1. قم بلصق التعليمة البرمجية التالية في ملف .cpp جديد:
    #include <windows.h>#include <stdio.h>#include <tchar.h>#include "sql.h"#include "sqlext.h"#include "odbcss.h"int main()    {    // ODBC handles    SQLHENV     henv = NULL;    SQLHDBC     hdbc = NULL;    SQLHSTMT    hstmt = NULL;	char szData[100];	short l; 	//These must be modified for your specific DSN    PTSTR       szDataSource = _T("localserver");    PTSTR       szUID = _T("UserName");    PTSTR       szPWD = _T("Password");	PTSTR		szDropTable = _T("if exists (select * from dbo.sysobjects where id = object_id(N'[my.table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [my.table]");	PTSTR		szCreateTable = _T("Create Table [my.table] (col1 int)");	PTSTR       szSQLSelect = _T("Select * from dbo.[my.table]");    // Initialize the ODBC environment.    if (SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv) == SQL_ERROR)        goto EXIT;    SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, SQL_IS_INTEGER);    // Allocate a connection handle and connect to the data source.    if (SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc) == SQL_ERROR)        goto EXIT;    if (SQLConnect(hdbc, (SQLTCHAR*) szDataSource, SQL_NTS, (SQLTCHAR*) szUID, SQL_NTS, (SQLTCHAR*) szPWD, SQL_NTS) == SQL_ERROR)        goto EXIT;    // Get a statement handle and execute a Transact-SQL SELECT statement.    if (SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt) == SQL_ERROR)        goto EXIT;	if(SQLSetScrollOptions( hstmt, SQL_CONCUR_VALUES, SQL_SCROLL_DYNAMIC, 1) == SQL_ERROR)		goto EXIT;	if (SQLExecDirect(hstmt, (SQLTCHAR*) szDropTable, SQL_NTS) == SQL_ERROR)        goto EXIT;	if (SQLExecDirect(hstmt, (SQLTCHAR*) szCreateTable, SQL_NTS) == SQL_ERROR)        goto EXIT;	if (SQLExecDirect(hstmt, (SQLTCHAR*) szSQLSelect, SQL_NTS) == SQL_ERROR)        goto EXIT;	if (SQLColAttribute(hstmt, 1, SQL_DESC_SCHEMA_NAME , &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_SCHEMA_NAME = %s, should be dbo\n"),szData);	if (SQLColAttribute(hstmt, 1, SQL_DESC_TABLE_NAME , &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_TABLE_NAME = %s, should be my.table\n"),szData);	if (SQLColAttribute(hstmt, 1, SQL_DESC_BASE_TABLE_NAME , &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_BASE_TABLE_NAME = %s, should be my.table\n"),szData);	if (SQLColAttribute(hstmt, 1, SQL_DESC_CATALOG_NAME, &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_CATALOG_NAME = %s, should be database specified in dsn\n"),szData);EXIT:    if (hstmt != NULL)        {        SQLFreeHandle(SQL_HANDLE_STMT, hstmt);        }    if (hdbc != NULL)        {        SQLDisconnect(hdbc);        SQLFreeHandle(SQL_HANDLE_DBC, hdbc);        }    if (henv != NULL)        {        SQLFreeHandle(SQL_HANDLE_ENV, henv);        }    return (0);    }					
  2. ترجمة التعليمات البرمجية وتشغيلها. كانت النتائج كما يلي:
    SQL_DESC_SCHEMA_NAME = my, should be dboSQL_DESC_TABLE_NAME = table, should be my.tableSQL_DESC_BASE_TABLE_NAME = table, should be my.tableSQL_DESC_CATALOG_NAME = dbo, should be database specified in dsn					

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 290646 - آخر مراجعة: 01/16/2015 21:48:30 - المراجعة: 3.2

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbmt kbbug kbfix kbmdac260sp1fix kbsqlserv2000sp1fix KB290646 KbMtar
تعليقات