Dar*_*man 19 c# datacolumn sqldatatypes
我有一个从SQL数据库获得的DataTable,如下所示:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试通过dataColumn.DataType获取每列的DataType时,我得到C#类型(Int32,Int64,String等).
问题:如何访问本机SQL数据类型(varchar,nvarchar,bigint ...)而不是C#类型?
我试过dataColumn.DataType.UnderlyingSystemType,结果是一样的.
inf*_*net 35
当然可以采用一列的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"];
Run Code Online (Sandbox Code Playgroud)
Dav*_*ras 10
你不能因为System.Data.DataTable(或DataColumn,或DataSet,或DataRow......)是一个通用的.NET数据容器,无论哪个工作您从您的加载数据的特定数据库引擎相同的方式.
这意味着如果您使用.NET Connector for SQL Server,MySQL,Access,PostgreSQL或其他任何东西,那么DataTable和DataColumn它们总是相同的,并且ADO.NET对象是通用的,可以与任何数据库引擎一起使用,因此列的类型是您已经发现了.NET类型.
小智 8
SqlConnection SqlCon = new SqlConnection("Data Source=(local);Database= dbname;Integrated Security=SSPI;");
SqlDataReader SqlDr;
SqlCon.Open();
SqlCmd = SqlCon.CreateCommand();
SqlCmd.CommandText = "select * from Tablename";
SqlDr = SqlCmd.ExecuteReader();
SqlDr.Read();
int i=0;
while (i < SqlDr.FieldCount)
{ MessageBox.Show(SqlDr.GetDataTypeName(i)); i++;}'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36683 次 |
| 最近记录: |