繁体   English   中英

在填充数组时未处理nullreferenceexception-C#

[英]nullreferenceexception was unhandled on filling up array - c#

我正在尝试检索保存在sql数据库中的所有名称
然后突然我得到了

在填充数组时未处理nullreferenceexception-未将对象引用设置为对象的实例。

这是我的代码:

我在错误

  imgName[i] = Convert.ToString(dt.Rows[i]["FinalImageName"]);  

在那部分,我想用所有名称填充imgName数组

我该如何解决?,请帮忙

string c_string = "server=.\\sqlexpress;database=Blue;trusted_connection=true";

public static string ImageToShow;
private int NumOfFiles;
private string[] imgName;

SqlConnection c = new SqlConnection(c_string);
//SqlCommand cm = new SqlCommand(cmd,c);

private void frmMain_Load(object sender, EventArgs e) {
    SqlConnection c = new SqlConnection(c_string);

    try {
        c.Open();
    }
    catch (SqlException ee) {
        MessageBox.Show(ee.Message);
    }
    finally {
        c.Close();
    }
    updateData();
}

private void updateData() {

    SqlConnection c = new SqlConnection(c_string);

    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FinalImages", c);

    DataTable dt = new DataTable();
    da.Fill(dt);

    NumOfFiles = dt.Rows.Count;
    for (int i = 0; i < dt.Rows.Count; i++) {
        imgName[i] = Convert.ToString(dt.Rows[i]["FinalImageName"]);

    }
}​

您需要实例化imgName数组。

private void updateData()
{
    {

        SqlConnection c = new SqlConnection(c_string);

        SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FinalImages", c);

        DataTable dt = new DataTable();
        da.Fill(dt);

        NumOfFiles = dt.Rows.Count;
        imgName = new string[NumOfFiles];
        for (int i = 0; i < NumOfFiles; i++)
        {
            imgName[i] = Convert.ToString(dt.Rows[i]["FinalImageName"]);

        } 
    }
}

那是因为你没有指定数组的大小...要么指定数组的大小,要么使用arraylist / generic list

试试这个:include namespace: using System.Collections.Generic;

string c_string = "server=.\\sqlexpress;database=Blue;trusted_connection=true";

    public static string ImageToShow; 
    private int NumOfFiles;
    //private string[] imgName;
   List<string> imgName= new List<string>();

SqlConnection c = new SqlConnection(c_string);
        //SqlCommand cm = new SqlCommand(cmd,c);


   private void frmMain_Load(object sender, EventArgs e)
    {
        SqlConnection c = new SqlConnection(c_string);

        try
        {
            c.Open();
        }
        catch (SqlException ee)
        {
            MessageBox.Show(ee.Message);
        }
        finally
        {
            c.Close();
        }
        updateData();
    }

private void updateData()
    {

        SqlConnection c = new SqlConnection(c_string);

        SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FinalImages", c);

        DataTable dt = new DataTable();
        da.Fill(dt);

        NumOfFiles = dt.Rows.Count;
        for (int i = 0; i < dt.Rows.Count; i++)
        {
           // imgName[i] = Convert.ToString(dt.Rows[i]["FinalImageName"]);
           imgName.Add(Convert.ToString(dt.Rows[i]["FinalImageName"]));
        } 
    }

您尚未创建数组,仅创建了可以保存对数组的引用的变量。

一旦知道有多少行,就创建数组:

imgName = new string[dt.Rows.Count];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM