C# 使用C获取SQL Server列的数据类型
我不确定我到底做错了什么,有人能纠正一下吗?我需要使用C确定从SQL Server数据库检索到的列的类型 比如,我有:C# 使用C获取SQL Server列的数据类型,c#,asp.net,sql,sqldatatypes,C#,Asp.net,Sql,Sqldatatypes,我不确定我到底做错了什么,有人能纠正一下吗?我需要使用C确定从SQL Server数据库检索到的列的类型 比如,我有: SqlConnection cn = new SqlConnection("Sql Connection String"); SqlCommand cmd = new SqlCommand("SELECT * FROM [TableName]", cn); SqlDataReader rdr = cmd.ExecuteReader(); while (rdr.Read())
SqlConnection cn = new SqlConnection("Sql Connection String");
SqlCommand cmd = new SqlCommand("SELECT * FROM [TableName]", cn);
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
for (int c = 0; c < rdr.VisibleFieldCount; c++)
{
System.Type type = rdr.GetFieldType(c);
//So can I do this? (Pseudo-code)
//switch(type)
//{
//case string:
//case int:
//case DateTime:
//etc.
//}
}
}
您可以执行以下操作:
/* ... code .... */
System.Type type = rdr.GetFieldType(c);
switch (Type.GetTypeCode(type))
{
case TypeCode.DateTime:
break;
case TypeCode.String:
break;
default: break;
}
/* ... code .... */
以下是一些适用于我的代码:
SqlCommand ubCommand = new SqlCommand(sqltext);
ubCommand.Connection = ubConnection;
SqlDataReader ubReader = null;
ubReader = ubCommand.ExecuteReader();
ubReader.Read();
schednum = ToInt32(ubReader["ScheduleNum"].ToString());
int fieldNum;
lbl_schedule.Text = $"Schedule {schednum}";
for (i = 0; i < num_fields; i++)
{
fieldNum = ubReader.GetOrdinal(fields[i]);
values[i] = ubReader[fieldNum].ToString();
types[i] = ubReader.GetFieldType(fieldNum);
// Check types[i].Name for the results, like "String" or "Decimal"
}
ubReader.Close();
ubConnection.Close();
你为什么不使用上下文?为什么不使用LinqToSql或实体框架呢?是的。我不知道那些是什么。你有我可以查看的链接吗?看看这个相关的问题:在我看来,你应该知道你的数据库表的模式是什么,因此你应该知道这些类型是什么……使用这样的东西会容易得多——它将为你处理很多这些问题,并保护你免受数据访问的无聊细节……谢谢,伙计。它可以工作,除了两种情况:当我有唯一标识符和二进制数据类型时。当它们应该是Guid和字节[]时,它们都作为对象返回。知道如何处理吗?@ahmd0:if type==typeofSystem.Guid例如。正确。。。您可以在switch语句的默认块中执行此操作。。。