如何检查 SQL 列数据类型是否为 int 并在条件为真时更改
How to check if SQL column datatype is int and change if the condition is true
我想检查 SQL Server Compact 列的数据类型是否为 Int
,如果是,请将其更改为 Float
。
但是我刚收到这条类型为字符串的消息,而第 7 列“金额”类型为 INT。
我目前还没有指定 SQL 查询从 INT 更改为 Float,我将添加一次它选择 true 的条件并获取该“金额”列的正确数据类型,即 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();
}
}
Type is String
你能这样检查吗
Type type = reader.GetFieldType(i);
switch (Type.GetTypeCode(type))
{
case TypeCode.DateTime:
break;
case TypeCode.String:
break;
default: break;
}
您可以简单地 运行 (string)cmd.ExecuteScalar();
并检查其值为 "int"
。我假设在所有模式中只有一列具有相同的 table 名称。如果还有更多,那么您也可以在条件 TABLE_SCHEMA = 'yourSchema'
中添加方案
我想检查 SQL Server Compact 列的数据类型是否为 Int
,如果是,请将其更改为 Float
。
但是我刚收到这条类型为字符串的消息,而第 7 列“金额”类型为 INT。
我目前还没有指定 SQL 查询从 INT 更改为 Float,我将添加一次它选择 true 的条件并获取该“金额”列的正确数据类型,即 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();
}
}
Type is String
你能这样检查吗
Type type = reader.GetFieldType(i);
switch (Type.GetTypeCode(type))
{
case TypeCode.DateTime:
break;
case TypeCode.String:
break;
default: break;
}
您可以简单地 运行 (string)cmd.ExecuteScalar();
并检查其值为 "int"
。我假设在所有模式中只有一列具有相同的 table 名称。如果还有更多,那么您也可以在条件 TABLE_SCHEMA = 'yourSchema'