我在将字符串数组分配到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);
答案 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的以下文章将帮助您入门:
答案 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.TextFieldParser
和System.Data.SqlClient.SqlBulkCopy
结合使用效果很好。您可以将数据放入SQL Server,就像无人的业务一样。