【发布时间】:2015-08-14 04:44:05
【问题描述】:
我对以下代码有疑问:
public void checkTypes(String sqlTable, String sqlColumn)
{
using (SqlConnection connection = new SqlConnection(conStr.Text))
{
String query = "SELECT " + sqlColumn + " FROM " + sqlTable;
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
SqlDataReader read = command.ExecuteReader();
while (read.Read())
{
for (int i = 0; i < read.FieldCount; i++)
{
Type dataType = read.GetFieldType(i);
if (dataType == typeof(int))
{
// Do for integers (INT, SMALLINT, BIGINT)
typeOf = "Integer";
read.Close();
connection.Close();
return;
}
else if (dataType == typeof(double))
{
//and so on...
}
}
}
}
}
现在...我只想检查列的类型,但问题是创建表时它没有条目,然后根本没有输入 while 循环。如何在不编写全新代码的情况下稍微修改它?我不想插入伪值。谢谢!希望有人可以帮助我。
编辑:
好的,所以我再解释一下: 用户可以在不同的文本框中输入列名。现在我想从每个框中获取列名并检查数据类型是否与该列应具有的数据类型匹配。
【问题讨论】:
-
您使用的是什么数据库?如果是 SqlServer,您可以从系统表 INFORMATION_SCHEMA.COLUMNS 中获取此信息;其他数据库可能有类似的系统表可以使用
-
你到底想做什么?打折剩余的
else..if语句,一旦找到int,您就会从该方法返回。您不能使用SqlDataReader执行此操作,因为如果您没有当前行,FieldCount属性将返回-1。如果您只想处理数据类型,则可以查询INFORMATION_SCHEMA.COLUMNS表。
标签: c# sql-server types datareader