Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C获取SQL Server列的数据类型_C#_Asp.net_Sql_Sqldatatypes - Fatal编程技术网

C# 使用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())

我不确定我到底做错了什么,有人能纠正一下吗?我需要使用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())
{
    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语句的默认块中执行此操作。。。