从字符串数组移动到datarow

时间:2010-12-22 13:37:52

标签: c# asp.net

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

然后我尝试转换为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);

6 个答案:

答案 0 :(得分:10)

您的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。

答案 1 :(得分:1)

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

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

How to: Add Rows to a DataTable

答案 2 :(得分:0)

检查调试器是否存在所需的列:

var x = dr["concat"];

并检查字符串数组中是否存在所需的值:

var y = strconcat[i];

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

参见msdn:如何将行添加到datatable =&gt; http://msdn.microsoft.com/en-us/library/5ycd1034%28VS.80%29.aspx

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

建立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,就像无人的业务一样。