问题描述
我有一个从SQL数据库中获得的数据表:
using (SqlCommand cmd = new SqlCommand(query, _sqlserverDB)) { using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { DataSet dataSet = new DataSet(); adapter.Fill(dataSet); result = (dataSet != null && dataSet.Tables != null && dataSet.Tables.Count > 0) ? dataSet.Tables[0] : null; } }
当我尝试通过dataColumn.datatype获取每列的数据类型时,我获得了C#类型(INT32,INT64,String等).
问题:如何访问本机SQL数据类型(varchar,nvarchar,bigint ...)而不是C#类型?
我尝试了dataColumn.datatype.UnderlyingSystemType,结果是相同的.
推荐答案
您不能因为System.Data.DataTable(或DataColumn,或DataSet或DataRow ...)是一个通用.NET数据容器,无论您在特定数据库引擎上,它都以相同的方式工作方式从.
加载您的数据这意味着您使用的是SQL Server,MySQL,Access,PostgreSQL或其他任何内容的.NET连接器,DataTable和DataColumn类始终相同,并且是ado.net对象,可以使用任何DB引擎,因此列以您发现的.NET类型键入.
其他推荐答案
当然可以采用列的sqldbtype,答案就在So: link .
SqlCommand cmd = connection.CreateCommand(); cmd.CommandText = "SET FMTONLY ON; select column from table; SET FMTONLY OFF"; SqlDataReader reader = cmd.ExecuteReader(); SqlDbType type = (SqlDbType)(int)reader.GetSchemaTable().Rows[0]["ProviderType"];
其他推荐答案
SqlConnection SqlCon = new SqlConnection("Data Source=(local);Database=dbname;Integrated Security=SSPI;"); SqlCon.Open(); SqlCmd = SqlCon.CreateCommand(); SqlCmd.CommandText = "select * from Tablename"; SqlDataReader SqlDr = SqlCmd.ExecuteReader(); SqlDr.Read(); int i = 0; while (i < SqlDr.FieldCount) { MessageBox.Show(SqlDr.GetDataTypeName(i)); i++; }