異常:
System.Data.sqlClient.sqlException: 着信の表形式のデータ ストリーム (TDS) リモート プロシージャ コール (RPC) プロトコル ストリームが不適切です。この RPC 要求に指定されたパラメータが多すぎます。最大数は 2100 です。
The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided in this RPC request. The maximum is 2100 d.
內送的表格式資料流 (TDS) 遠端程序呼叫 (RPC) 通訊協定資料流不正確。此 RPC 要求中提供了太多參數。最大值為 2100!。
红色处:msqlCommand.Parameters的参数超过2100个。用拼文字串来解决就OK
Public Function PFn_ExcuteDB(ByVal strsqlBuilder As StringBuilder,_
Optional ByVal htPara As Hashtable = nothing,_
Optional ByVal intTimeOut As Integer = 0) As Integer
Dim enumerator As IDictionaryEnumerator
Try
''sql文の存在を判断する
'If strsqlBuilder Is nothing Then
' PFn_ExcuteDB = -1
' Exit Function
'End If
'sql文を追加する
msqlCommand.CommandText = strsqlBuilder.ToString()
msqlCommand.CommandType = CommandType.Text
'タイムアウト時間を判断する
If 0 < intTimeOut Then
'自定義の時間をセットする
msqlCommand.CommandTimeout = intTimeOut
Else
'システムの時間をセットする
msqlCommand.CommandTimeout = ComVariable.SystemInfo.DBTimeOut
End If
'項目の値をセットする
If Not htPara Is nothing Then
'臨時オブジェクトを変化する
enumerator = htPara.GetEnumerator
'項目をループする
While enumerator.MoveNext()
'sqlの中、変数をセットする
If enumerator.Value Is nothing Then
msqlCommand.Parameters.AddWithValue("@" & PFn_ToString(enumerator.Key),dbnull.Value)
Else
msqlCommand.Parameters.AddWithValue("@" & PFn_ToString(enumerator.Key),enumerator.Value)
End If
End While
End If
'LOGファイルを出力する
Call ComMethod.PSb_WriteLOGFile(2,strsqlBuilder,htPara)
'DBを実行する
PFn_ExcuteDB = msqlCommand.ExecuteNonQuery()
'オブジェクトの初期化をセットする
msqlCommand.CommandText = String.Empty
'引数を解放する
msqlCommand.Parameters.Clear()
Catch ex As Exception
PFn_ExcuteDB = -1
'引数を解放する
msqlCommand.Parameters.Clear()
'オブジェクトの初期化をセットする
msqlCommand.CommandText = String.Empty
''異常メッセージを表示する 'MsgBox(ex.ToString()) Throw ex End Try End Function