【问题标题】:Converting String to bit before inserting into the database在插入数据库之前将字符串转换为位
【发布时间】:2009-11-08 05:19:28
【问题描述】:

任何人都可以帮助将 C# 中的字符串值转换为 Sql 中的位等价物。我正在尝试将数据表的值批量复制到 Sql 表中。我在数据表中的所有值都是字符串格式。当我尝试批量复制到 SQL 表时,我收到位数据类型列的错误。任何人都可以在我批量复制到 SQL 表之前发布 C# 代码以将字符串转换为位类型。

谢谢, 波动率

【问题讨论】:

    标签: c# asp.net sql sql-server sqlbulkcopy


    【解决方案1】:

    如果您的字符串是“真”和“假”(忽略大小写和空格),这将起作用:

    bool bit = bool.Parse(str);
    

    如果你的字符串是别的东西,你可以使用:

    bool bit = !string.IsNullOrEmpty(str) &&
      (str[0]=='Y' || str[0]=='y' || str[0]=='T' || str[0]=='t' || str[0]=='1');
    

    SQL 需要一个布尔值。

    【讨论】:

    • 谢谢 Ray.How do I convert string to float for the same scenario.I try Convert.ToDouble(str);但它没有用。请帮忙。
    • 我使用 double.Parse() 作为“浮点”SQL 数据类型,但 Convert.ToDouble() 只是调用 double.Parse(),所以它应该可以工作。 Convert.ToDouble() 调用本身是否引发了异常,或者 SQL 是否拒绝了结果值?另外,您使用的是什么数据访问层(即,您使用什么调用来提交数据?)
    • Ray,当我尝试批量复制在 Convert.ToDouble(str) 之后已经具有单元格的数据表的值时,我收到以下错误。 System.InvalidOperationException:来自数据源的 String 类型的给定值无法转换为指定目标列的 float 类型。 ---> System.FormatException:无法将参数值从 String 转换为 Double。 ---> System.FormatException:输入字符串的格式不正确。 at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
    • 当我调用这个方法时 bulkcopy.WriteToServer(dtUpdate);要将值从数据表复制到 Sql 表,我得到了错误。但是当我看到它抛出异常的数据表中的值时,它是一个有效数字。该列的所有值都是有效数字。
    • 如果 dtUpdate 中的值是字符串并且无法解析,则会发生您引用的异常。一些可能性:Column.DataType 不是 Double,列名或顺序混淆。
    【解决方案2】:

    SQL Server 将识别"true" and "false" for the bit datatype。此外,零存储零,非零存储为“1”。

    您发送的是"true" 还是true?

    如果您在使用双打时遇到相同的错误(根据 cmets 到其他答案),那么我怀疑您正在发送引号。

    【讨论】:

      【解决方案3】:

      SQL Server 中的 bit 数据类型与 C# 中的 bool 数据类型匹配。因此,只需将您的字符串转换为 bools(使用 bool.Parse() 或您最喜欢的替代方法),您就应该设置好了。

      【讨论】:

      • 谢谢,丹尼尔。我如何将字符串转换为浮点数以适应相同的场景。我尝试使用 Convert.ToDouble(str);但它没有工作。请帮助
      【解决方案4】:
      int a = Convert.ToInt32( row.ItemArray[5]);
      bool b;
      b = Convert.ToBoolean(a);
      switch (a)
      {
          case 1:
              b = true;
              break;
          case 0:
              b = false;
              break;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-03-19
        • 2016-03-02
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-19
        • 2012-10-25
        相关资源
        最近更新 更多