【问题标题】:INSERT INTO MSSQL from textfile contains NULL values on INTEGER来自文本文件的 INSERT INTO MYSQL 在 INTEGER 中包含 NULL 值
【发布时间】:2017-05-11 08:53:06
【问题描述】:

我在将文本文件中的 NULL 值插入/批量插入 MSSQL 时遇到问题。 当用数字替换 NULL 值时,它可以正常工作。 2 列设置为 ALLOW NULLS,

PublicationCaption 和 PublicationNumber

这是文本文件的示例

1#DI#Dagens Industri#435#358#2016-10-19 2#DN#Dagens Nyheter#NULL#359#2016-10-19

我认为代码中的 foreach 循环存在一些问题,我需要添加一些内容才能使其正常工作。

这是我正在使用的代码

public static DataTable Publication()
    {

        DataTable dtPublication = new DataTable();

        dtPublication.Columns.AddRange(new DataColumn[6] { new DataColumn("ID", System.Type.GetType("System.Int32")),
        new DataColumn("PublicationCode", System.Type.GetType("System.String")),
        new DataColumn("PublicationCaption",System.Type.GetType("System.String")),
        new DataColumn("PublicationNumber", System.Type.GetType("System.Int32")),
        new DataColumn("ProductNumber", System.Type.GetType("System.Int32")),
        new DataColumn("CreatedDate", System.Type.GetType("System.DateTime")),

        });

        for (int i = 0; i < dtPublication.Columns.Count; i++)
        {
            dtPublication.Columns[i].AllowDBNull = true;
        }

        string txtData = File.ReadAllText(@"C:\Publication2.txt", System.Text.Encoding.Default);

        foreach (string row in txtData.Split('\n'))
        {

            if (!string.IsNullOrEmpty(row))
            {

                dtPublication.Rows.Add();

                int i = 0;
                foreach (string cell in row.Split('#'))
                {

                    dtPublication.Rows[dtPublication.Rows.Count - 1][i] = cell;

                    i++;

                }
            }
        }

        return dtPublication;
    }

调试时得到(输入字符串的格式不正确。无法存储在 PublicationNumber 列中。需要输入 Int32。)。

请我需要一些建议,帮助解决问题。 感谢您的宝贵时间。

【问题讨论】:

  • 如果在字符串而不是 WORD NULL 中会有空格怎么办?喜欢 1#DI#Dagens Industri#435#358#2016-10-19 2#DN#Dagens Nyheter##359#2016-10-19
  • 如果是 int 使用 int.Parse(cell)。一般来说,使用调试器。失败时cell的值是多少?
  • @Whencesoever 它让我喜欢这样的错误(输入字符串的格式不正确。无法将 存储在 PublicationNumber 列中。需要输入 Int32)
  • @TimSchmelter 失败时单元格的值为“NULL”
  • @HenriThiesen:那你有答案了,如何将字符串"NULL"翻译成数字?

标签: sql sql-server datatable insert null


【解决方案1】:

数据库不知道您尝试插入的“NULL”字符串实际上意味着一个空值。要解决此问题,请将“NULL”字符串更改为 DBNull.Value:

if (cell == "NULL")
   dtPublication.Rows[dtPublication.Rows.Count - 1][i] = DBNull.Value;
else
   dtPublication.Rows[dtPublication.Rows.Count - 1][i] = cell;

【讨论】:

  • 此操作导致 foreach 循环出错我得到(输入字符串的格式不正确。无法在 ID 列中存储 。需要输入 Int32。)
  • 这个解决方案也可以,忘记在最后添加 i++ 1+
【解决方案2】:

没有将字符串"NULL" 转换为DataTable 中的可为空字段的功能。你必须自己实现它:

object value = DBNull.Value;
if(!"NULL".Equals(cell, StringComparison.InvariantCultureIgnoreCase))
    value = cell;
dtPublication.Rows[dtPublication.Rows.Count - 1][i] = value;

【讨论】:

  • 如何实现?我的语法变旧了当前上下文中不存在名称“StringComparsion”。
  • @HenriThiesen:看看我的回答;)
  • 1+ 现在工作我忘记添加 i++;到底。谢谢@Tim Schmelter
  • @HenriThiesen:请随意投票或接受答案:)
猜你喜欢
  • 2011-02-23
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2011-12-31
相关资源
最近更新 更多