【问题标题】:Moving from string array into datarow从字符串数组移动到数据行
【发布时间】:2019-10-04 14:57:02
【问题描述】:

我在将字符串数组分配到 Datarow 时遇到问题。首先,我为字符串数组创建了对象,并将 2 个值放入数组中,共 100 个(整体大小)。应该在数组中放置多少值取决于不同的值,不过我没有在这里展示。

然后我尝试转换为 DataRow。但它说。 “对象引用未设置为对象的实例”

DataRow dr = null;
string[] strconcat = new string[100];
dr["concat"] = strconcat[i];

提前致谢

编辑--实际上我正在尝试将这些字符串数组值放入下拉列表(ddchooseadeal)。除了这个还有什么好办法吗?

 locname = ddchoosealoc.SelectedValue.ToString();
            string[] strdeals = new string[100];
            string[] strconcat = new string[100];
            int i;
            for(i =0; i< dsdeal.Tables[0].Rows.Count; i++)
            {
               strdeals[i] = Convert.ToString( dsdeal.Tables[0].Rows[i]["Title"]);
               strconcat[i] = strdeals[i]+" -- "+ locname;
            }
               DataRow dr = null;
               ddchooseadeal.Items.Clear();
               ListItem li = new ListItem("Choose a Deal");
               ddchooseadeal.Items.Add(li);


               dr["drconcat"] = strconcat[0];
               ListItem item = new ListItem();
               item.Text = NullHandler.NullHandlerForString(strconcat[i], string.Empty);
               ddchoosealoc.Items.Add(item);

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您的 DataRow 不是任何实际上正确的 DataTable 的一部分,这就是您不能实例化直接 DataRow 对象的原因。

    这就是理论部分,解决你的问题

    // Declare a DataTable object.
    DataTable dt = new DataTable();
    
    // Add some columns to the DataTable
    dt.Columns.Add("StringHolder");
    
    // Now suppose , you are having 10 items in your string array
    foreach(string str in strArray)
    {
        DataRow drow = dt.NewRow() ;   // Here you will get an actual instance of a DataRow
        drow ["StringHolder"] = str;   // Assign values 
        dt.Rows.Add(drow);             // Don't forget to add the row to the DataTable.             
    }
    

    因此,按照上述步骤,您将拥有一个填充了行的 DataTable。

    【讨论】:

      【解决方案2】:

      这里的字符串数组有 100 个元素,全部为空。因此,如果您将其中一个元素分配到数据行中,您将分配 null。不是字符串。

      如果您正在创建一个数组,则元素将保持未初始化状态,直到您用某些东西填充它。值类型将有其默认值(0 表示 int,false 表示 bool 等),而引用类型(如字符串)默认为 null。

      此外,在您的示例中, dr 设置为 null。

      【讨论】:

        【解决方案3】:

        您正在尝试将值添加到为 null DataRow dr = null; 的变量,这就是您收到 "object reference not set to an instance of an object" 错误的原因。

        您需要使用 DataTable 对象创建一个新数据行,然后将值添加到该 DataRow。如果没有看到更多代码,很难提供更多帮助,但 MSDN 的以下文章将帮助您入门:

        How to: Add Rows to a DataTable

        【讨论】:

          【解决方案4】:

          如果您需要的列存在,请与您的调试器核实:

          var x = dr["concat"];
          

          并检查您想要的值是否存在于字符串数组中:

          var y = strconcat[i];
          

          您上面的数据行已用 null 初始化,因此错误消息绝对合理。 您必须设计一个包含所需列的数据表。之后从该表中获取一个新行并将字符串数组中的值保存到数据行。

          参见 msdn:如何向数据表添加行 => http://msdn.microsoft.com/en-us/library/5ycd1034%28VS.80%29.aspx

          【讨论】:

            【解决方案5】:

            它抛出 NullPointerException 因为 dr 为 null,您必须使用 DataTable.NewRow Method 创建 dataRow

            【讨论】:

              【解决方案6】:

              根据 Saurabh 的回答,您可以构建一个 DataTable 及其列并添加每个 DataRow。

              但是 DataRow 有一个构造函数,它采用 params object[] values。因此,您可以自动将整个字符串数组添加到 DataRow,前提是元素的顺序与指定的列的顺序匹配:

              // Create the data table
              var dataTable = new DataTable("TableName");
              
              // Add the columns you will need
              dataTable.Columns.Add("FirstName");
              dataTable.Columns.Add("LastName");
              dataTable.Columns.Add("Whatever");
              
              // Get your data in string array format
              // Will need to be FirstName, LastName, Whatever
              string[] data = LoadStringArrayFromCsvOrSomething();
              
              // Add the DataRow using the string array
              dataTable.Rows.Add(data);
              

              这与Microsoft.VisualBasic.FileIO.TextFieldParserSystem.Data.SqlClient.SqlBulkCopy 结合使用效果很好。您可以将数据扔到 SQL Server 中,就像它是无人问津的事情一样。

              【讨论】:

                猜你喜欢
                • 2016-08-16
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-09-28
                • 1970-01-01
                相关资源
                最近更新 更多