【问题标题】:Checking the type of a SQL column in C#在 C# 中检查 SQL 列的类型
【发布时间】:2015-05-18 09:51:35
【问题描述】:

我在这里搜索并找到了一些与此问题相关的线程,但它们并没有帮助我。我需要检查某个数据表中某个 SQL 列的类型并进行比较。因此,假设我有一个名为“CustomerName”的列,这是 SQL 中的 varchar。然后我想将它与字符串或其他“varchar”进行比较,并检查是否匹配。例如,当我的列的类型为 numeric 且字符串的值为“varchar”时,它应该会失败。我认为字符串的情况是一个坏主意(例如,当我有 varchar(50) 并将其与“varchar”进行比较时)。有没有办法做到这一点?

【问题讨论】:

  • 到目前为止你有没有尝试过?
  • 我试过了,但没有任何帮助。我需要 SQL 数据类型而不是 C# 类型。我需要将它与某个列名而不是索引进行比较

标签: c# sql types


【解决方案1】:

你可以这样尝试:

System.Type myType = reader.GetFieldType(value);
switch (myType.GetTypeCode(myType))
{
    case TypeCode.String:
        break;
    // and so on ........
}

【讨论】:

【解决方案2】:
    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)
            }
            else if (dataType == typeof(double))
            {
                // Do for doubles (DOUBLE, DECIMAL)
            }
            else if (dataType == typeof(string))
            {
                // Do for Strings (VARCHAR, NVARCHAR)
            }
            else if (dataType == typeof(DateTime))
            {
                // Do for DateTime (DATETIME)
            }
            else if (dataType == typeof(byte[]))
            {
                // Do for Binary (BINARY, VARBINARY, NVARBINARY, IMAGE)
            }
        }
    }

【讨论】:

  • 这仅检查 C# 数据类型对吗?因此,如果我的专栏有“varchar”,它就不起作用还是我错了?
  • 没有。如果是 varchar,那么在上面的代码中,它会进入注释为 'Do for Strings' 的块
  • 出了点问题。为什么这不起作用?字符串连接 = conStringBox.Text;字符串查询 = "SELECT [" + sqlTable + "] FROM [" + sqlColumn + "]"; SqlCommand command = new SqlCommand(查询, 连接);他告诉我 sqlCommand 有一些无效参数
  • 好的,我解决了。这样可行!谢谢!这就是我一直在寻找的!
  • 最后一个问题:我只需要让他读一次。循环一次后如何关闭阅读器并跳出while循环?
猜你喜欢
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
相关资源
最近更新 更多