首页 > 解决方案 > 如何检查 SQL 列数据类型是否为 int 并在条件为真时更改

问题描述

我想检查 SQL Server Compact 列的数据类型是否为Int,如果是,请将其更改为Float.

但是,我刚刚收到此类型为字符串的消息,而第 7 列“金额”类型为 INT。

我目前还没有指定 SQL 查询从 INT 更改为 Float,一旦条件为真,我将添加该“金额”列的正确数据类型,该“金额”列现在是 INT。

private void CheckDataType()
{
    MessageBox.Show("Checking Data Type");
    string sqlcon = @"Data Source = .\Records.sdf;Persist Security Info=False";

    using (SqlCeConnection conn = new SqlCeConnection(sqlcon))
    {
        conn.Open();

        SqlCeCommand cmd = new SqlCeCommand(@"Select data_type
    from information_schema.columns
    where table_name = 'OutgoingChequeRecords' and column_name = 'Amount'", conn);

        SqlCeDataReader reader = cmd.ExecuteReader();
                  
        while (reader.Read())
        {
            MessageBox.Show("Reading Started");

            for (int i = 0; i < reader.FieldCount; i++)
            {
                Type dataType = reader.GetFieldType(i);
                string columnName = reader.GetName(i); 

                if (dataType == typeof(int))
                {
                    // Do for integers (INT, SMALLINT, BIGINT)
                    MessageBox.Show("Type is INT");
                }
                else if (dataType == typeof(double))
                {
                    // Do for doubles (DOUBLE, DECIMAL)
                    MessageBox.Show("Type is Decimal");
                }
                else if (dataType == typeof(string))
                {
                    // Do for Strings (VARCHAR, NVARCHAR).
                    MessageBox.Show("Type is String");
                }
                else if (dataType == typeof(DateTime))
                {
                    // Do for DateTime (DATETIME)
                    MessageBox.Show("Type is DateTime");
                }
                else if (dataType == typeof(byte[]))
                {
                    // Do for Binary (BINARY, VARBINARY, NVARBINARY, IMAGE)
                    MessageBox.Show(columnName);
                }
               
                else if (dataType == typeof(float))
                {
                    MessageBox.Show("Type is Float");
                }    
            }
        }
        MessageBox.Show("Reading Stopped, Connection Closed");

        conn.Close();
    }   
}

类型是字符串

标签: c#sqlsql-server-ce

解决方案


你能检查一下吗

Type type = reader.GetFieldType(i);

switch (Type.GetTypeCode(type))
{
    case TypeCode.DateTime:
        break;
    case TypeCode.String:
        break;
    default: break;
}

推荐阅读