从数据库表中读取行时动态获取字段类型

时间:2015-12-06 16:59:04

标签: c# sql-server

我正在使用SSIS中的C#从SQL Server中的表中读取行。当我遍历每一列时,我想从表中获取该字段的数据类型。这是我的代码:

$directory = "C:\example\"

Get-Mailbox –Server "MYserverName" | Foreach-Object {
    $mailboxName = $_.Name
    Get-MailboxPermission | Format-List |
        Out-File (Join-Path $directory "MailboxUser-$mailboxName.txt")
}

第一个问题是当我在数据库的位字段上执行string s = ""; public override void Input0_ProcessInputRow(Input0Buffer Row) { using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\cassf\Documents\Tyler Tech\FL\ncc3\CM_Property.csv", true)) { foreach (PropertyInfo inputColumn in Row.GetType().GetProperties()) { if (!inputColumn.Name.EndsWith("IsNull")) { try { s += Convert.ToString(inputColumn.GetValue(Row,null).ToString()); } catch { some code } } } } } 时,它会将值更改为Convert.ToString()True。我想要False1的实际值。

因此,为了尝试修复此问题,我想检查0的字段类型,看起来脚本正在从一个位转换为Boolean。然后我可以手动放回boolean1。我希望直接从数据库中获取值。

非常感谢任何帮助。

谢谢, 肯特

1 个答案:

答案 0 :(得分:0)

我需要实现一个帮助函数,以便在需要时进行自己的转换,如下所示:

Access-Control-Allow-Origin

对于布尔值,您只需将其转换为Int,将int转换为字符串(您将以字符串格式获得1或0)。

根据您对string s = ""; public override void Input0_ProcessInputRow(Input0Buffer Row) { using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\cassf\Documents\Tyler Tech\FL\ncc3\CM_Property.csv", true)) { foreach (PropertyInfo inputColumn in Row.GetType().GetProperties()) { if (!inputColumn.Name.EndsWith("IsNull")) { try { s += ValueToString(inputColumn.GetValue(Row,null)); } catch { some code } } } } } protected string ValueToString(object value) { if (value == null) throw new ArgumentNullException("I don't know how to convert null to string, implement me!"); switch (Type.GetTypeCode(value.GetType())) { // Any kind of special treatment, you implement here... case TypeCode.Boolean: return Convert.ToInt16(value).ToString(); default: return value.ToString(); // ...otherwise, just use the common conversion } } 变量的处理方式,您可能希望使用引号括起字符串值,如果是,则可以在s方法中执行此操作。