public void GetChars () { cmd.CommandText = "Select type_char, type_varchar,type_text, type_ntext "; cmd.CommandText += "from string_family where id=1"; reader = cmd.ExecuteReader (); reader.Read (); string charstring = reader.GetString (0); //string ncharstring = reader.GetString (1); string varcharstring = reader.GetString (1); //string nvarcharstring = reader.GetString (2); string textstring = reader.GetString (2); string ntextstring = reader.GetString (3); reader.Close (); reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess); reader.Read (); int len = 0; char[] arr; len = (int) reader.GetChars (0, 0, null, 0, 0); Assert.AreEqual (charstring.Length, len, "#1"); arr = new char [len]; reader.GetChars (0, 0, arr, 0, len); Assert.AreEqual (0, charstring.CompareTo (new String (arr)), "#2"); len = (int)reader.GetChars (1,0,null,0,0); Assert.AreEqual (varcharstring.Length, len, "#3"); arr = new char [len]; reader.GetChars (1, 0,arr,0,len); Assert.AreEqual (0, varcharstring.CompareTo (new String (arr)), "#4"); len = (int)reader.GetChars (2,0,null,0,0); Assert.AreEqual (textstring.Length, len, "#5"); arr = new char [len]; reader.GetChars (2,0,arr,0,len); Assert.AreEqual (0, textstring.CompareTo (new String (arr)), "#6"); len = (int)reader.GetChars (3,0,null,0,0); Assert.AreEqual (ntextstring.Length, len, "#7"); arr = new char [len]; reader.GetChars (3,0,arr,0,len); Assert.AreEqual (0, ntextstring.CompareTo (new String (arr)), "#8"); reader.Close (); reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess); reader.Read (); len = (int)reader.GetChars (0,0,null,0,0); arr = new char [10]; for (int i = 0; i < len; ++i) { Assert.AreEqual (len - i, reader.GetChars (0, i, null, 0, 0), "#9_" + i); Assert.AreEqual (1, reader.GetChars (0, i, arr, 0, 1), "#10_" + i); Assert.AreEqual (charstring [i], arr [0], "#11_" + i); } Assert.AreEqual (0, reader.GetChars (0, len + 10, null, 0, 0)); reader.Close (); }
private StringBuffer GetBufferFor( SqlDataReader reader, int ordinal ) { var length = reader.GetChars( ordinal,0,null,0,0 ); var bufferBlock =(int) length / bufferStep; Stack<char[]> buffers; lock( _reservedBuffers ) { if( !_reservedBuffers.TryGetValue( bufferBlock,out buffers ) ) { buffers = new Stack<char[]>(); _reservedBuffers.Add( bufferBlock, buffers ); } } char[] buffer; lock( buffers ) { buffer = buffers.Count!=0 ? buffers.Pop() : new char[(bufferBlock+1)*bufferStep]; } reader.GetChars( ordinal,0,buffer,0,(int)length ); return new StringBuffer() { length = (int) length, buffer = buffer }; }