Unicode veri ve sunucu kod sayfaları
Important Note: |
|---|
This feature will be removed in a future version of Microsoft SQL Server. Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. CLR tümleştirme kullanın. |
Genişletilmiş saklı yordam API, Unicode verileri için etkinleştirilir; ancak, Unicode meta veriler için etkinleştirilmemiştir.# Tanımlamak Unicode yönergesini genişletilmiş saklı yordam API herhangi bir etkisi yoktur.
Tüm meta veriler, döndürülen veya genişletilmiş saklı yordam APı'SINE genişletilmiş, tarafından sağlanan saklı yordam uygulama sunucu çok baytlı kod sayfasının varsayılır.Genişletilmiş saklı yordamının API sunucu uygulamasının varsayılan kod sayfa çaðýrarak elde edilebilir, uygulamanın çalıştığı bilgisayarın ANSI kod sayfa olur. srv_pfield alan parametresi küme SRV_SPROC_CODEPAGE için.
Genişletilmiş saklı yordam API uygulamanız Unicode etkinse, bu veriler genişletilmiş saklı yordam APı'SINE geçirmeden önce çok baytlı verilere, Unicode meta veriler sütun adları, hata iletileri ve benzeri dönüştürmeniz gerekir.
Örnek
Genişletilmiş saklı yordamını anlatıldığı Unicode dönüşümleri örneği sağlar.Dikkat:
Sütun veri Unicode verileri olarak geçildi srv_describe sütun SRVNVARCHAR olarak açıklanan çünkü.
Sütun adı meta veriler geçirilir srv_describe çok baytlı veri olarak.
The extended stored procedure calls srv_pfield with the field parameter set to SRV_SPROC_CODEPAGE to obtain the multibyte code page of Microsoft SQL Server.
Geçirilen hata iletileri srv_sendmsg çok baytlı veri olarak.
__declspec(dllexport) RETCODE proc1 (SRV_PROC *srvproc) { #define MAX_COL_NAME_LEN 25 #define MAX_COL_DATA_LEN 50 #define MAX_ERR_MSG_LEN 250 #define MAX_SERVER_ERROR 20000 #define XP_ERROR_NUMBER MAX_SERVER_ERROR+1 int retval; UINT serverCodePage; CHAR *szServerCodePage; WCHAR unicodeColumnName[MAX_COL_NAME_LEN]; CHAR multibyteColumnName[MAX_COL_NAME_LEN]; WCHAR unicodeColumnData[MAX_COL_DATA_LEN]; WCHAR unicodeErrorMessage[MAX_ERR_MSG_LEN]; CHAR multibyteErrorMessage[MAX_ERR_MSG_LEN]; lstrcpyW (unicodeColumnName, L"column1"); lstrcpyW (unicodeColumnData, L"column1 data"); lstrcpyW (unicodeErrorMessage, L"No Error!"); // Obtain server code page. // szServerCodePage = srv_pfield (srvproc, SRV_SPROC_CODEPAGE, NULL); if (NULL != szServerCodePage) serverCodePage = atol(szServerCodePage); else { // Problem situation exists. srv_senddone(srvproc, (SRV_DONE_ERROR | SRV_DONE_MORE), 0, 0); return 1; } // Convert column name for Unicode to multibyte using the // server code page. // retval = WideCharToMultiByte( serverCodePage, // code page 0, // default unicodeColumnName, // wide-character string -1, // string is null terminated multibyteColumnName, // address of buffer for new // string sizeof (multibyteColumnName), // size of buffer NULL, NULL); if (0 == retval) { lstrcpyW (unicodeErrorMessage, L"Conversion to multibyte failed."); goto Error; } retval = srv_describe (srvproc, 1, multibyteColumnName, SRV_NULLTERM, SRVNVARCHAR, MAX_COL_DATA_LEN*sizeof(WCHAR), // destination SRVNVARCHAR, lstrlenW(unicodeColumnData)*sizeof(WCHAR), unicodeColumnData); //source if (FAIL == retval) { lstrcpyW (unicodeErrorMessage, L"srv_describe failed."); goto Error; } retval = srv_sendrow(srvproc); if (FAIL == retval) { lstrcpyW (unicodeErrorMessage, L"srv_sendrow failed."); goto Error; } retval = srv_senddone (srvproc, SRV_DONE_MORE|SRV_DONE_COUNT, 0, 1); if (FAIL == retval) { lstrcpyW (unicodeErrorMessage, L"srv_senddone failed."); goto Error; } return 0; Error: // convert error message from Unicode to multibyte. retval = WideCharToMultiByte( serverCodePage, // code page 0, // default unicodeErrorMessage, // wide-character string -1, // string is null terminated multibyteErrorMessage, // address of buffer for new // string sizeof (multibyteErrorMessage), // size of buffer NULL, NULL); srv_sendmsg(srvproc, SRV_MSG_ERROR, XP_ERROR_NUMBER, SRV_INFO, 1, NULL, 0, __LINE__, multibyteErrorMessage, SRV_NULLTERM); srv_senddone(srvproc, (SRV_DONE_ERROR | SRV_DONE_MORE), 0, 0); return 1; }
Important Note: