FIX: RPC 呼叫已做好了時,發生違規存取包含位元參數不是有效的值

文章翻譯 文章翻譯
文章編號: 314128 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
Bug #: 356323 (SHILOH_BUGS)
全部展開 | 全部摺疊

在此頁中

徵狀

在 SQL Server 2000 Service Pack 2 (SP2),執行 SQL Profiler 追蹤時,會包含 RPC 事件 (RPC: 開始RPC: 已完成),包括 參數具有大於 9 造成存取違規 CNetInputBuffer::Init 中的數值的陳述式。

在 SQL Server 2000 Service Pack 1 (SP1),截斷追蹤和 SQL Profiler 中收到錯誤訊息,但沒有存取違規發生在 SQL Server]。資料表 資料行資料類型是無關 ;,只有參數的資料型別是這個問題相關。

注意: 資料表 的資料行可能是 位元 以外的另一個型別。

SQL Server 2000 SP2 (8.00.534) 會產生下列的堆疊傾印:
   Short Stack Dump

   00410B23 Module(sqlservr+00010B23) (CNetInputBuffer::Init+0000005C)
   004B7422 Module(sqlservr+000B7422) (CNetInputStream::FAddEventFragment+0000005E)
   00639EB1 Module(sqlservr+00239EB1) (PcnisGetRpcTraceInput+000004BB)
   0063A2C1 Module(sqlservr+0023A2C1) (PostRPC+000000AB)
   00605A07 Module(sqlservr+00205A07) (execrpc+0000095E)
   00437E05 Module(sqlservr+00037E05) (execute_rpc+00000019)
   00410E73 Module(sqlservr+00010E73) (process_commands+00000210)
   41073379 Module(UMS+00003379) (ProcessWorkRequests+0000024A)
   41073071 Module(UMS+00003071) (ThreadStartRoutine+000000BD)
   7800A27B Module(MSVCRT+0000A27B) (beginthread+000000CE)
   77E8758A Module(KERNEL32+0000758A) (SetFilePointer+0000018A)
				

解決方案

服務套件資訊

如果要解決這個問題,取得最新的 Service Pack,Microsoft SQL Server 2000。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
290211如何取得最新的 SQL Server 2000 Service Pack

Hotfix 資訊

注意: Microsoft SQL Server 2000 Service Pack 3 發行之前建立的下列 Hotfix。

此修正程式的英文版具有檔案屬性 (或更新) 中如下表所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。 當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用 [中日期] 和 [時間] 工具,在 [控制台] 中的 [時區] 索引標籤]。
   Date         Version    Size     File name
   ------------------------------------------------

   12-DEC-2001  8.00.552   7,442,513  Sqlservr.exe
				
注意: 由於檔案相依性最新版 Hotfix 或包含這些檔案的功能可能也包含其他檔案。


狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。 這個問題,首先已經在 Microsoft SQL Server 2000 服務套件 4 中獲得修正。

其他相關資訊

若要重現存取違規,執行 SQL Profiler 追蹤,其中包含至少一個 RPC 事件 (RPC: 開始RPC: 已完成),然後執行下列的 C 程式碼:
	long int myBitStatus=0xff; //Invalid value

	SQLRETURN   retcode;
	SQLHENV     henv = NULL;
	SQLHDBC     hdbc = NULL;
	SQLHSTMT    hstmt = NULL;

	PTSTR       szDataSource = _T("localserver");
	PTSTR       szUID = _T("sa");
	PTSTR       szPWD = _T("sa_password");

	if (SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv) == SQL_ERROR)
		return 1;
	SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3,
	SQL_IS_INTEGER);

	if (SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc) == SQL_ERROR)
		return 1;

	if (SQLConnect(hdbc, (SQLTCHAR*) szDataSource, SQL_NTS,
	(SQLTCHAR*) szUID, SQL_NTS, (SQLTCHAR*) szPWD, SQL_NTS) == SQL_ERROR)
		return 1;

	if (SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt) == SQL_ERROR)
		return 1;

	retcode = SQLAllocHandle(hstmt, hdbc, &hstmt);
	retcode=SQLBindParameter(hstmt, 
				 1, 
				 SQL_PARAM_INPUT, 
				 SQL_C_BIT,
				 SQL_BIT, 
				 1, 
				 0, 
				 &myBitStatus, 
				 0, 
				 &myBitStatus);

	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
		retcode = SQLExecDirect (hstmt, "SELECT au_id FROM pubs.dbo.authors WHERE contract = ?", SQL_NTS);
	}
				
伺服器正在執行 SQL Server 2000 SP2 時發生此存取違規 ; SQL Profiler 工具的版本並不會影響這個問題。

屬性

文章編號: 314128 - 上次校閱: 2013年10月24日 - 版次: 5.4
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Service Pack 2
關鍵字:?
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbqfe kbbug kbfix kbsqlserv2000presp3fix KB314128 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:314128
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com