public static Encoding GetEncoding(byte[] collation) { if (TdsCollation.SortId(collation) != 0) { return(GetEncodingFromSortOrder(collation)); } else { return(GetEncodingFromLCID(collation)); } }
protected override void ProcessColumnInfo() { // We are connected to a Sql 7.0 server if (TdsVersion < TdsVersion.tds80) { base.ProcessColumnInfo(); return; } // VARADHAN: TDS 8 Debugging //Console.WriteLine ("Tds80.cs: In ProcessColumnInfo... entry"); int numColumns = Comm.GetTdsShort(); //Console.WriteLine ("Column count={0}", numColumns); TDS 8 Debugging for (int i = 0; i < numColumns; i += 1) { byte[] flagData = new byte[4]; for (int j = 0; j < 4; j += 1) { flagData[j] = Comm.GetByte(); } bool nullable = (flagData[2] & 0x01) > 0; //bool caseSensitive = (flagData[2] & 0x02) > 0; bool writable = (flagData[2] & 0x0c) > 0; bool autoIncrement = (flagData[2] & 0x10) > 0; bool isIdentity = (flagData[2] & 0x10) > 0; TdsColumnType columnType = (TdsColumnType)(Comm.GetByte() & 0xff); //Console.WriteLine ("Actual ColumnType: {0}", columnType); TDS 8 Debugging if ((byte)columnType == 0xef) { columnType = TdsColumnType.NChar; } TdsColumnType xColumnType = columnType; if (IsLargeType(columnType)) { if (columnType != TdsColumnType.NChar) { columnType -= 128; } } int columnSize; string tableName = null; byte[] collation = null; int lcid = 0, sortId = 0; if (IsBlobType(columnType)) { columnSize = Comm.GetTdsInt(); } else if (IsFixedSizeColumn(columnType)) { columnSize = LookupBufferSize(columnType); } else if (IsLargeType(xColumnType)) { columnSize = Comm.GetTdsShort(); } else { columnSize = Comm.GetByte() & 0xff; } if (xColumnType == TdsColumnType.BigChar || xColumnType == TdsColumnType.BigNVarChar || xColumnType == TdsColumnType.BigVarChar || xColumnType == TdsColumnType.NChar || xColumnType == TdsColumnType.NVarChar || xColumnType == TdsColumnType.Text || xColumnType == TdsColumnType.NText) { // Read collation for SqlServer 2000 and beyond collation = Comm.GetBytes(5, true); lcid = TdsCollation.LCID(collation); sortId = TdsCollation.SortId(collation); } if (IsBlobType(columnType)) { tableName = Comm.GetString(Comm.GetTdsShort()); //Console.WriteLine ("Tablename: "+tableName); TDS 8 Debugging } byte precision = 0; byte scale = 0; switch (columnType) { case TdsColumnType.NText: case TdsColumnType.NChar: case TdsColumnType.NVarChar: columnSize /= 2; break; case TdsColumnType.Decimal: case TdsColumnType.Numeric: //Comm.Skip (1); precision = Comm.GetByte(); //Console.WriteLine ("Precision: {0}", precision); TDS 8 Debugging scale = Comm.GetByte(); //Console.WriteLine ("Scale: {0}", scale); TDS 8 Debugging break; } string columnName = Comm.GetString(Comm.GetByte()); TdsDataColumn col = new TdsDataColumn(); Columns.Add(col); #if NET_2_0 col.ColumnType = columnType; col.ColumnName = columnName; col.IsAutoIncrement = autoIncrement; col.IsIdentity = isIdentity; col.ColumnSize = columnSize; col.NumericPrecision = precision; col.NumericScale = scale; col.IsReadOnly = !writable; col.AllowDBNull = nullable; col.BaseTableName = tableName; col.LCID = lcid; col.SortOrder = sortId; #else col ["ColumnType"] = columnType; col ["ColumnName"] = columnName; col ["IsAutoIncrement"] = autoIncrement; col ["IsIdentity"] = isIdentity; col ["ColumnSize"] = columnSize; col ["NumericPrecision"] = precision; col ["NumericScale"] = scale; col ["IsReadOnly"] = !writable; col ["AllowDBNull"] = nullable; col ["BaseTableName"] = tableName; col ["LCID"] = lcid; col ["SortOrder"] = sortId; #endif } //Console.WriteLine ("Tds80.cs: In ProcessColumnInfo... exit"); TDS 8 Debugging }
public static Encoding GetEncodingFromSortOrder(byte[] collation) { int sortId = TdsCollation.SortId(collation); return(GetEncodingFromSortOrder(sortId)); }
public static Encoding GetEncodingFromLCID(byte[] collation) { int lcid = TdsCollation.LCID(collation); return(GetEncodingFromLCID(lcid)); }