2013-06-24 2 views
4

Я пытаюсь получить тип данных каждого столбца, чтобы сделать некоторую проверку. Я уже пробовал getSchemaTable, но он дает мне схему таблицы без значений.Как получить тип данных и размер столбца с помощью SqlDataReader?

Например, у меня есть таблица в моей базе данных и имя столбца: id_declarant. Я хочу получить тип данных и размер значения от id_declarant.

Вот код:

comm.Connection=new SqlConnection(connectionString); 
String sql = @" 
      SELECT * 
      FROM id_declarant,declarant 
      WHERE (declarant.Nom_pren_RS='" + textBox1.Text + "') 
      and (id_declarant.mat_fisc=declarant.mat_fisc) "; 
comm.CommandText = sql; 
comm.Connection.Open(); 
string mat_fisc; 
string clé_mat_fisc; 
string categorie ; 
string num_etab_sec ; 
string activite; 
StringBuilder sb = new StringBuilder(); 
String Nom = textBox1.Text; 
using (SqlDataReader reader = comm.ExecuteReader()) 
{ 
    while (reader.Read()) 
    { 
     //here i want to know how to retrieve the reader[0].Type and Size to do the verification 
     mat_fisc = reader[0].ToString(); 
     clé_mat_fisc = reader["clé_mat_fisc"].ToString(); 
     categorie = reader["categorie"].ToString(); 
     num_etab_sec = reader["num_etab_sec"].ToString(); 
     activite = reader["activite"].ToString(); 
     sb.Append("EF" + mat_fisc + clé_mat_fisc + categorie + num_etab_sec + textBox2.Text + textBox3.Text + Nom + activite); 

ответ

3
Type type = reader.GetFieldType(0); 
+1

Можете ли вы подробнее рассказать о своем ответе? – Stephan

+0

Я попробовал это: string Type = reader ["id_declarant"]. GetFieldType (0) .FullName; но он отображает System.string – manu

+0

Это тип type = reader.GetFieldType (0); вместо строки Type = reader ["id_declarant"]. GetFieldType (0) .FullName; BTW, каков тип данных id_declarant coumn – ojlovecd

0

Вы можете использовать функцию GetDataTypeName(), чтобы получить тип данных поля

String dataType = reader.GetDataTypeName(FIELD_INDEX); 
0
public string ReadString(IDataReader reader, string columnName) { 

string myString = ""; 

var index = reader.GetOrdinal(columnName); 

var fieldType = reader.GetFieldType(index); 

if (fieldType.FullName.Contains("Guid")) 
{ 
myString = reader.IsDBNull(index) ? "" : reader.GetGuid(index).ToString(); 
} 
else 
{ 
myString = reader.IsDBNull(index) ? "" : reader.GetString(index); 
} 
return myString; 
} 
0

Пожалуйста, используйте функцию GetTableSchema.

SqlDataReader reader= command.ExecuteReader(); 

using (var schemaTable = reader.GetSchemaTable()) 
    { 
     foreach (DataRow row in schemaTable.Rows) 
     { 
      string ColumnName= row.Field<string>("ColumnName"); 
      string DataTypeName= row.Field<string>("DataTypeName"); 
      short NumericPrecision= row.Field<short>("NumericPrecision"); 
      short NumericScale= row.Field<short>("NumericScale"); 
      int ColumnSize= row.Field<int>("ColumnSize"); 
      Console.WriteLine("Column: {0} Type: {1} Precision: {2} Scale: {3} ColumnSize {4}",  
      ColumnName, DataTypeName, NumericPrecision, scale,ColumnSize); 
     } 
    } 

Используя схему таблиц, вы можете получить все свойства, связанные с столбцом, с помощью C#.

Спасибо.