本文整理汇总了C#中System.Data.SqlClient.TdsParserStateObject.ReadPlpBytesChunk方法的典型用法代码示例。如果您正苦于以下问题:C# TdsParserStateObject.ReadPlpBytesChunk方法的具体用法?C# TdsParserStateObject.ReadPlpBytesChunk怎么用?C# TdsParserStateObject.ReadPlpBytesChunk使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Data.SqlClient.TdsParserStateObject
的用法示例。
在下文中一共展示了TdsParserStateObject.ReadPlpBytesChunk方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ReadPlpAnsiChars
internal int ReadPlpAnsiChars(ref char[] buff, int offst, int len, SqlMetaDataPriv metadata, TdsParserStateObject stateObj)
{
int charsRead = 0;
int charsLeft = 0;
int bytesRead = 0;
int totalcharsRead = 0;
if (stateObj._longlen == 0)
{
Debug.Assert(stateObj._longlenleft == 0);
return 0; // No data
}
Debug.Assert(((ulong)stateObj._longlen != TdsEnums.SQL_PLP_NULL),
"Out of sync plp read request");
Debug.Assert((buff == null && offst == 0) || (buff.Length >= offst + len), "Invalid length sent to ReadPlpAnsiChars()!");
charsLeft = len;
if (stateObj._longlenleft == 0)
{
stateObj.ReadPlpLength(false);
if (stateObj._longlenleft == 0)
{// Data read complete
stateObj._plpdecoder = null;
return 0;
}
}
if (stateObj._plpdecoder == null)
{
Encoding enc = metadata.encoding;
if (enc == null)
{
if (null == _defaultEncoding)
{
ThrowUnsupportedCollationEncountered(stateObj);
}
enc = _defaultEncoding;
}
stateObj._plpdecoder = enc.GetDecoder();
}
while (charsLeft > 0)
{
bytesRead = (int)Math.Min(stateObj._longlenleft, (ulong)charsLeft);
if ((stateObj._bTmp == null) || (stateObj._bTmp.Length < bytesRead))
{
// Grow the array
stateObj._bTmp = new byte[bytesRead];
}
bytesRead = stateObj.ReadPlpBytesChunk(stateObj._bTmp, 0, bytesRead);
charsRead = stateObj._plpdecoder.GetChars(stateObj._bTmp, 0, bytesRead, buff, offst);
charsLeft -= charsRead;
offst += charsRead;
totalcharsRead += charsRead;
if (stateObj._longlenleft == 0) // Read the next chunk or cleanup state if hit the end
stateObj.ReadPlpLength(false);
if (stateObj._longlenleft == 0)
{ // Data read complete
stateObj._plpdecoder = null;
break;
}
}
return (totalcharsRead);
}
示例2: ReadPlpAnsiChars
internal int ReadPlpAnsiChars(ref char[] buff, int offst, int len, SqlMetaDataPriv metadata, TdsParserStateObject stateObj)
{
int num3 = 0;
int num2 = 0;
int num = 0;
int num4 = 0;
if (stateObj._longlen == 0L)
{
return 0;
}
num2 = len;
if (stateObj._longlenleft == 0L)
{
stateObj.ReadPlpLength(false);
if (stateObj._longlenleft == 0L)
{
return 0;
}
}
Encoding encoding = metadata.encoding;
if (encoding == null)
{
if (this._defaultEncoding == null)
{
this.ThrowUnsupportedCollationEncountered(stateObj);
}
encoding = this._defaultEncoding;
}
while (num2 > 0)
{
num = (int) Math.Min(stateObj._longlenleft, (ulong) num2);
if ((stateObj._bTmp == null) || (stateObj._bTmp.Length < num))
{
stateObj._bTmp = new byte[num];
}
num = stateObj.ReadPlpBytesChunk(stateObj._bTmp, 0, num);
num3 = encoding.GetChars(stateObj._bTmp, 0, num, buff, offst);
num2 -= num3;
offst += num3;
num4 += num3;
if (stateObj._longlenleft == 0L)
{
stateObj.ReadPlpLength(false);
}
if (stateObj._longlenleft == 0L)
{
return num4;
}
}
return num4;
}