返回的数据类型因表中的数据而异

Datatype returned varies based on data in table(返回的数据类型因表中的数据而异)
本文介绍了返回的数据类型因表中的数据而异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含两列的表 - [security_role_name] 和 security_role_cd .security_role_cd 的数据类型是 Security_Role 表中的 smallint.

I have a table with two column - [security_role_name] and security_role_cd . Datatype for security_role_cd is smallint in Security_Role table.

我有以下数据选择逻辑.返回的数据类型因数据的场景而异:-

I have following data selection logic. The datatype returned varies based on the scenario of data:-

  1. 表格中没有数据
  2. 表格中有一条记录

问题

  1. 为什么在这些场景中数据类型会有所不同
  2. 如何改正

注意:目前我正在使用 try..catch 来满足这种情况

Note: Currently i am using try..catch to meet this scenario

代码

    private int GetNextRoleID(SqlConnection connection)
    {
        int? newRoleID = null;
        //string commandText = "SELECT  (MAX(security_role_cd)) AS [NewRoleID] FROM Security_Role ";
        string commandText = "SELECT  TOP 1 security_role_cd AS [NewRoleID] FROM Security_Role ORDER BY security_role_cd DESC";
        SqlCommand command = new SqlCommand(commandText, connection);
        command.CommandType = System.Data.CommandType.Text;
        SqlDataReader reader = command.ExecuteReader();
        if (reader.HasRows)
        {
            while (reader.Read())
            {
                if (!reader.IsDBNull(0))
                {
                    //newRoleID = Convert.ToInt32((reader.GetInt16(0)) + 1);

                    try
                    {
                        newRoleID = Convert.ToInt32(reader.GetInt16(0)) + 1;
                    }
                    catch
                    {
                        int result = (reader.GetInt32(0));
                        newRoleID = result + 1;
                    }
                }
            }
        }
        reader.Close();

        if (newRoleID == null)
        {
            newRoleID = 1;
        }

        return (Convert.ToInt32(newRoleID));

    }

参考:

  1. 如何使用 ADO.NET 获取表中列的 SqlDbType?

推荐答案

可以看reader.GetFieldType(0).例如:

    int i;
    switch (Type.GetTypeCode(reader.GetFieldType(0)))
    {
        case TypeCode.Int16: i = reader.GetInt16(0); break;
        case TypeCode.Int32: i = reader.GetInt32(0); break;
        // TODO: any other cases you need to handle
        default: throw new NotSupportedException();
    }

或者更简单:

    int i = Convert.ToInt32(reader.GetValue(0));

这篇关于返回的数据类型因表中的数据而异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)