本文整理汇总了C#中System.Data.Odbc.OdbcDataReader.GetSchemaTable方法的典型用法代码示例。如果您正苦于以下问题:C# OdbcDataReader.GetSchemaTable方法的具体用法?C# OdbcDataReader.GetSchemaTable怎么用?C# OdbcDataReader.GetSchemaTable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Data.Odbc.OdbcDataReader
的用法示例。
在下文中一共展示了OdbcDataReader.GetSchemaTable方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DataTableFromDataReaderDataTypes
private void DataTableFromDataReaderDataTypes(DataTable dataTypesTable, OdbcDataReader dataReader, OdbcConnection connection) {
DataTable schemaTable = null;
//
// Build a DataTable from the reader
schemaTable = dataReader.GetSchemaTable();
// vstfdevdiv:479715 Handle cases where reader is empty
if (null == schemaTable) {
throw ADP.OdbcNoTypesFromProvider();
}
object[] getTypeInfoValues = new object[schemaTable.Rows.Count];
DataRow dataTypesRow;
DataColumn typeNameColumn = dataTypesTable.Columns[DbMetaDataColumnNames.TypeName];
DataColumn providerDbTypeColumn = dataTypesTable.Columns[DbMetaDataColumnNames.ProviderDbType];
DataColumn columnSizeColumn = dataTypesTable.Columns[DbMetaDataColumnNames.ColumnSize];
DataColumn createParametersColumn = dataTypesTable.Columns[DbMetaDataColumnNames.CreateParameters];
DataColumn dataTypeColumn = dataTypesTable.Columns[DbMetaDataColumnNames.DataType];
DataColumn isAutoIncermentableColumn = dataTypesTable.Columns[DbMetaDataColumnNames.IsAutoIncrementable];
DataColumn isCaseSensitiveColumn = dataTypesTable.Columns[DbMetaDataColumnNames.IsCaseSensitive];
DataColumn isFixedLengthColumn = dataTypesTable.Columns[DbMetaDataColumnNames.IsFixedLength];
DataColumn isFixedPrecisionScaleColumn = dataTypesTable.Columns[DbMetaDataColumnNames.IsFixedPrecisionScale];
DataColumn isLongColumn = dataTypesTable.Columns[DbMetaDataColumnNames.IsLong];
DataColumn isNullableColumn = dataTypesTable.Columns[DbMetaDataColumnNames.IsNullable];
DataColumn isSearchableColumn = dataTypesTable.Columns[DbMetaDataColumnNames.IsSearchable];
DataColumn isSearchableWithLikeColumn = dataTypesTable.Columns[DbMetaDataColumnNames.IsSearchableWithLike];
DataColumn isUnsignedColumn = dataTypesTable.Columns[DbMetaDataColumnNames.IsUnsigned];
DataColumn maximumScaleColumn = dataTypesTable.Columns[DbMetaDataColumnNames.MaximumScale];
DataColumn minimumScaleColumn = dataTypesTable.Columns[DbMetaDataColumnNames.MinimumScale];
DataColumn literalPrefixColumn = dataTypesTable.Columns[DbMetaDataColumnNames.LiteralPrefix];
DataColumn literalSuffixColumn = dataTypesTable.Columns[DbMetaDataColumnNames.LiteralSuffix];
DataColumn SQLTypeNameColumn = dataTypesTable.Columns[OdbcMetaDataColumnNames.SQLType];
const int indexTYPE_NAME = 0;
const int indexDATA_TYPE = 1;
const int indexCOLUMN_SIZE = 2;
const int indexCREATE_PARAMS = 5;
const int indexAUTO_UNIQUE_VALUE = 11;
const int indexCASE_SENSITIVE = 7;
const int indexFIXED_PREC_SCALE = 10;
const int indexNULLABLE = 6;
const int indexSEARCHABLE = 8;
const int indexUNSIGNED_ATTRIBUTE = 9;
const int indexMAXIMUM_SCALE = 14;
const int indexMINIMUM_SCALE = 13;
const int indexLITERAL_PREFIX = 3;
const int indexLITERAL_SUFFIX = 4;
const int SQL_DATE_V2 = 9;
const int SQL_TIME_V2 = 10;
TypeMap typeMap ;
while (dataReader.Read()) {
dataReader.GetValues(getTypeInfoValues);
dataTypesRow = dataTypesTable.NewRow();
ODBC32.SQL_TYPE sqlType;
dataTypesRow[typeNameColumn] = getTypeInfoValues[indexTYPE_NAME];
dataTypesRow[SQLTypeNameColumn] = getTypeInfoValues[indexDATA_TYPE];
sqlType = (ODBC32.SQL_TYPE)(Int32) Convert.ChangeType(getTypeInfoValues[indexDATA_TYPE],
typeof(Int32),
(System.IFormatProvider)null);
// if the driver is pre version 3 and it returned the v2 SQL_DATE or SQL_TIME types they need
// to be mapped to thier v3 equlivants
if (connection.IsV3Driver == false) {
if ((int)sqlType == SQL_DATE_V2) {
sqlType = ODBC32.SQL_TYPE.TYPE_DATE;
}
else if ((int)sqlType == SQL_TIME_V2) {
sqlType = ODBC32.SQL_TYPE.TYPE_TIME;
}
}
try {
typeMap = TypeMap.FromSqlType(sqlType);
}
// FromSqlType will throw an argument exception if it does not recognize the SqlType.
// This is not an error since the GetTypeInfo DATA_TYPE may be a SQL data type or a driver specific
// type. If there is no TypeMap for the type its not an error but it will degrade our level of
// understanding of/ support for the type.
catch (ArgumentException) {
typeMap = null;
}
// if we have a type map we can determine the dbType and the CLR type if not leave them null
if (typeMap != null) {
dataTypesRow[providerDbTypeColumn] = typeMap._odbcType;
dataTypesRow[dataTypeColumn] = typeMap._type.FullName;
// setting isLong and isFixedLength only if we have a type map because for provider
// specific types we have no idea what the types attributes are if GetTypeInfo did not
// tell us
switch (sqlType) {
//.........这里部分代码省略.........
示例2: ExecuteReaderObject
//.........这里部分代码省略.........
//Handle Parameters
//Note: We use the internal variable as to not instante a new object collection,
//for the the common case of using no parameters.
if((null != _parameterCollection) && (0 < _parameterCollection.Count)) {
int parameterBufferSize = _parameterCollection.CalcParameterBufferSize(this);
if(null == parameterBuffer || parameterBuffer.Length < parameterBufferSize) {
if (null != parameterBuffer) {
parameterBuffer.Dispose();
}
parameterBuffer = new CNativeBuffer(parameterBufferSize);
_cmdWrapper._nativeParameterBuffer = parameterBuffer;
}
else {
parameterBuffer.ZeroMemory();
}
parameterBuffer.DangerousAddRef(ref mustRelease);
_parameterCollection.Bind(this, _cmdWrapper, parameterBuffer);
}
if(!localReader.IsBehavior(CommandBehavior.SchemaOnly)) {
// Can't get the KeyInfo after command execution (SQL Server only since it does not support multiple
// results on the same connection). Stored procedures (SP) do not return metadata before actual execution
// Need to check the column count since the command type may not be set to SP for a SP.
if((localReader.IsBehavior(CommandBehavior.KeyInfo) || localReader.IsBehavior(CommandBehavior.SchemaOnly))
&& (CommandType != CommandType.StoredProcedure)) {
Int16 cColsAffected;
retcode = stmt.NumberOfResultColumns(out cColsAffected);
if(retcode == ODBC32.RetCode.SUCCESS || retcode == ODBC32.RetCode.SUCCESS_WITH_INFO) {
if(cColsAffected > 0) {
localReader.GetSchemaTable();
}
}
else if(retcode == ODBC32.RetCode.NO_DATA) {
// do nothing
}
else {
// any other returncode indicates an error
_connection.HandleError(stmt, retcode);
}
}
switch(odbcApiMethod) {
case ODBC32.SQL_API.SQLEXECDIRECT:
if(localReader.IsBehavior(CommandBehavior.KeyInfo) || _isPrepared) {
//Already prepared, so use SQLExecute
retcode = stmt.Execute();
// Build metadata here
// localReader.GetSchemaTable();
}
else {
#if DEBUG
//if (AdapterSwitches.OleDbTrace.TraceInfo) {
// ADP.DebugWriteLine("SQLExecDirectW: " + CommandText);
//}
#endif
//SQLExecDirect
retcode = stmt.ExecuteDirect(CommandText);
}
break;
case ODBC32.SQL_API.SQLTABLES:
retcode = stmt.Tables((string)methodArguments[0], //TableCatalog
示例3: DataTableFromDataReaderDataTypes
private void DataTableFromDataReaderDataTypes(DataTable dataTypesTable, OdbcDataReader dataReader, OdbcConnection connection)
{
DataTable schemaTable = null;
schemaTable = dataReader.GetSchemaTable();
if (schemaTable == null)
{
throw ADP.OdbcNoTypesFromProvider();
}
object[] values = new object[schemaTable.Rows.Count];
DataColumn column19 = dataTypesTable.Columns[DbMetaDataColumnNames.TypeName];
DataColumn column18 = dataTypesTable.Columns[DbMetaDataColumnNames.ProviderDbType];
DataColumn column17 = dataTypesTable.Columns[DbMetaDataColumnNames.ColumnSize];
DataColumn column16 = dataTypesTable.Columns[DbMetaDataColumnNames.CreateParameters];
DataColumn column15 = dataTypesTable.Columns[DbMetaDataColumnNames.DataType];
DataColumn column6 = dataTypesTable.Columns[DbMetaDataColumnNames.IsAutoIncrementable];
DataColumn column14 = dataTypesTable.Columns[DbMetaDataColumnNames.IsCaseSensitive];
DataColumn column5 = dataTypesTable.Columns[DbMetaDataColumnNames.IsFixedLength];
DataColumn column13 = dataTypesTable.Columns[DbMetaDataColumnNames.IsFixedPrecisionScale];
DataColumn column4 = dataTypesTable.Columns[DbMetaDataColumnNames.IsLong];
DataColumn column3 = dataTypesTable.Columns[DbMetaDataColumnNames.IsNullable];
DataColumn column2 = dataTypesTable.Columns[DbMetaDataColumnNames.IsSearchable];
DataColumn column = dataTypesTable.Columns[DbMetaDataColumnNames.IsSearchableWithLike];
DataColumn column12 = dataTypesTable.Columns[DbMetaDataColumnNames.IsUnsigned];
DataColumn column11 = dataTypesTable.Columns[DbMetaDataColumnNames.MaximumScale];
DataColumn column10 = dataTypesTable.Columns[DbMetaDataColumnNames.MinimumScale];
DataColumn column9 = dataTypesTable.Columns[DbMetaDataColumnNames.LiteralPrefix];
DataColumn column8 = dataTypesTable.Columns[DbMetaDataColumnNames.LiteralSuffix];
DataColumn column7 = dataTypesTable.Columns[OdbcMetaDataColumnNames.SQLType];
while (dataReader.Read())
{
TypeMap map;
dataReader.GetValues(values);
DataRow row = dataTypesTable.NewRow();
row[column19] = values[0];
row[column7] = values[1];
ODBC32.SQL_TYPE sqltype = (ODBC32.SQL_TYPE) ((short) ((int) Convert.ChangeType(values[1], typeof(int), null)));
if (!connection.IsV3Driver)
{
if (sqltype == ~ODBC32.SQL_TYPE.WLONGVARCHAR)
{
sqltype = ODBC32.SQL_TYPE.TYPE_DATE;
}
else if (sqltype == ~ODBC32.SQL_TYPE.GUID)
{
sqltype = ODBC32.SQL_TYPE.TYPE_TIME;
}
}
try
{
map = TypeMap.FromSqlType(sqltype);
}
catch (ArgumentException)
{
map = null;
}
if (map != null)
{
row[column18] = map._odbcType;
row[column15] = map._type.FullName;
switch (sqltype)
{
case ODBC32.SQL_TYPE.SS_TIME_EX:
case ODBC32.SQL_TYPE.SS_UTCDATETIME:
case ODBC32.SQL_TYPE.SS_VARIANT:
case ODBC32.SQL_TYPE.GUID:
case ODBC32.SQL_TYPE.WCHAR:
case ODBC32.SQL_TYPE.BIT:
case ODBC32.SQL_TYPE.TINYINT:
case ODBC32.SQL_TYPE.BIGINT:
case ODBC32.SQL_TYPE.BINARY:
case ODBC32.SQL_TYPE.CHAR:
case ODBC32.SQL_TYPE.NUMERIC:
case ODBC32.SQL_TYPE.DECIMAL:
case ODBC32.SQL_TYPE.INTEGER:
case ODBC32.SQL_TYPE.SMALLINT:
case ODBC32.SQL_TYPE.FLOAT:
case ODBC32.SQL_TYPE.REAL:
case ODBC32.SQL_TYPE.DOUBLE:
case ODBC32.SQL_TYPE.TIMESTAMP:
case ODBC32.SQL_TYPE.TYPE_DATE:
case ODBC32.SQL_TYPE.TYPE_TIME:
case ODBC32.SQL_TYPE.TYPE_TIMESTAMP:
goto Label_02F8;
case ODBC32.SQL_TYPE.SS_XML:
case ODBC32.SQL_TYPE.WLONGVARCHAR:
case ODBC32.SQL_TYPE.LONGVARBINARY:
case ODBC32.SQL_TYPE.LONGVARCHAR:
goto Label_02BC;
case ODBC32.SQL_TYPE.WVARCHAR:
case ODBC32.SQL_TYPE.VARBINARY:
case ODBC32.SQL_TYPE.VARCHAR:
goto Label_02DA;
}
}
goto Label_0314;
Label_02BC:
row[column4] = true;
row[column5] = false;
//.........这里部分代码省略.........
示例4: ExecuteReaderObject
private OdbcDataReader ExecuteReaderObject(CommandBehavior behavior, string method, bool needReader, object[] methodArguments, ODBC32.SQL_API odbcApiMethod)
{
OdbcDataReader target = null;
try
{
ODBC32.RetCode typeInfo;
this.DisposeDeadDataReader();
this.ValidateConnectionAndTransaction(method);
if ((CommandBehavior.SingleRow & behavior) != CommandBehavior.Default)
{
behavior |= CommandBehavior.SingleResult;
}
OdbcStatementHandle statementHandle = this.GetStatementHandle().StatementHandle;
this._cmdWrapper.Canceling = false;
if ((this.weakDataReaderReference != null) && this.weakDataReaderReference.IsAlive)
{
object obj2 = this.weakDataReaderReference.Target;
if (((obj2 != null) && this.weakDataReaderReference.IsAlive) && !((OdbcDataReader) obj2).IsClosed)
{
throw ADP.OpenReaderExists();
}
}
target = new OdbcDataReader(this, this._cmdWrapper, behavior);
if (!this.Connection.ProviderInfo.NoQueryTimeout)
{
this.TrySetStatementAttribute(statementHandle, ODBC32.SQL_ATTR.QUERY_TIMEOUT, (IntPtr) this.CommandTimeout);
}
if ((needReader && this.Connection.IsV3Driver) && (!this.Connection.ProviderInfo.NoSqlSoptSSNoBrowseTable && !this.Connection.ProviderInfo.NoSqlSoptSSHiddenColumns))
{
if (target.IsBehavior(CommandBehavior.KeyInfo))
{
if (!this._cmdWrapper._ssKeyInfoModeOn)
{
this.TrySetStatementAttribute(statementHandle, (ODBC32.SQL_ATTR) 0x4cc, (IntPtr) 1L);
this.TrySetStatementAttribute(statementHandle, ODBC32.SQL_ATTR.SQL_COPT_SS_TXN_ISOLATION, (IntPtr) 1L);
this._cmdWrapper._ssKeyInfoModeOff = false;
this._cmdWrapper._ssKeyInfoModeOn = true;
}
}
else if (!this._cmdWrapper._ssKeyInfoModeOff)
{
this.TrySetStatementAttribute(statementHandle, (ODBC32.SQL_ATTR) 0x4cc, (IntPtr) 0L);
this.TrySetStatementAttribute(statementHandle, ODBC32.SQL_ATTR.SQL_COPT_SS_TXN_ISOLATION, (IntPtr) 0L);
this._cmdWrapper._ssKeyInfoModeOff = true;
this._cmdWrapper._ssKeyInfoModeOn = false;
}
}
if (target.IsBehavior(CommandBehavior.KeyInfo) || target.IsBehavior(CommandBehavior.SchemaOnly))
{
typeInfo = statementHandle.Prepare(this.CommandText);
if (typeInfo != ODBC32.RetCode.SUCCESS)
{
this._connection.HandleError(statementHandle, typeInfo);
}
}
bool success = false;
CNativeBuffer parameterBuffer = this._cmdWrapper._nativeParameterBuffer;
RuntimeHelpers.PrepareConstrainedRegions();
try
{
if ((this._parameterCollection != null) && (0 < this._parameterCollection.Count))
{
int initialSize = this._parameterCollection.CalcParameterBufferSize(this);
if ((parameterBuffer == null) || (parameterBuffer.Length < initialSize))
{
if (parameterBuffer != null)
{
parameterBuffer.Dispose();
}
parameterBuffer = new CNativeBuffer(initialSize);
this._cmdWrapper._nativeParameterBuffer = parameterBuffer;
}
else
{
parameterBuffer.ZeroMemory();
}
parameterBuffer.DangerousAddRef(ref success);
this._parameterCollection.Bind(this, this._cmdWrapper, parameterBuffer);
}
if (target.IsBehavior(CommandBehavior.SchemaOnly))
{
goto Label_0443;
}
if ((target.IsBehavior(CommandBehavior.KeyInfo) || target.IsBehavior(CommandBehavior.SchemaOnly)) && (this.CommandType != System.Data.CommandType.StoredProcedure))
{
short num2;
typeInfo = statementHandle.NumberOfResultColumns(out num2);
switch (typeInfo)
{
case ODBC32.RetCode.SUCCESS:
case ODBC32.RetCode.SUCCESS_WITH_INFO:
if (num2 > 0)
{
target.GetSchemaTable();
}
goto Label_029A;
}
if (typeInfo != ODBC32.RetCode.NO_DATA)
{
this._connection.HandleError(statementHandle, typeInfo);
//.........这里部分代码省略.........