【问题标题】:Reading a row of data from the database and store it into an array从数据库中读取一行数据并将其存储到一个数组中
【发布时间】:2016-03-06 05:13:58
【问题描述】:

我想从 SQL Server 数据库中读取数据并将其存储到一个数组中。

首先,我必须获取每一行并将其存储到一个二维数组中。

            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM tbl_Subjects WHERE USN IN(SELECT USN FROM tbl_Student WHERE Semester='" + DropDownList1.Text + "')");
            SqlDataReader rs;
            rs = cmd.ExecuteReader();
            while (rs.Read())
            {
                for (int k = 1; k < 10; k++)
                {
                    g = k - 1;
                    num = rs[0].ToString();
                    read[g] = Convert.ToInt32(num);

                }

这是我到目前为止所做的。我不知道如何直接将其分配给 2D 数组。因此使用一维数组并认为我可以稍后复制它。

编辑:

我已按照 Hari Prasad 建议的步骤进行操作,

            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM tbl_Subjects WHERE USN IN(SELECT USN FROM tbl_Student WHERE Semester='" + DropDownList1.Text + "')",con);
            SqlDataReader rs;
            rs = cmd.ExecuteReader();
            while (rs.Read())
            {
                int j = 0;
                for (int i = 0; i < rs.FieldCount; i++)
                {
                    arr[i, j] = int.Parse(rs.GetString(0));
                }


            }
            con.Close();
            rs.Close();

在这之后我得到了一个 FormatException。 “输入字符串的格式不正确。”

【问题讨论】:

  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入

标签: c# arrays multidimensional-array


【解决方案1】:

可以使用new int[5,5] 创建二维数组,但需要注意的是我们应该提前知道大小。在这种情况下,不幸的是,阅读器没有提前提供行数。

回答您的问题“我不知道如何直接将其分配给 2D 数组”

//Declare 2d array
int[,] x = new int[5][rs.FieldCount]; // 
int i=0;

for( int index = 0; index < rs.FieldCount; index ++ )
{
    int validInt;

    if(int.TryParse(rs.GetString(index), out validInt)
    {
        // usage
        x[i,index] = validInt;
    }
    else { x[i,index] = -1; //default value
    } 
}

我建议使用DataTable 而不是二维数组(上述方法),它非常简单。

var dataTable = new DataTable();
dataTable.Load(rs);

现在你的所有数据都在DataTable

foreach(DataRow row in dt.Rows)
{
     foreach (DataColumn col in myTopTenData.Columns)
     {
         Console.Write(row[col].ToString());       
     }
}

【讨论】:

  • 按照你的第一种方法后,我得到了一个 FormatException。
  • 哪一行出现异常?
  • arr[i, j] = int.Parse(rs.GetString(0));这个
  • 您确定吗,您的数据只包含整数?
  • 更新了验证输入的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 2018-11-02
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
相关资源
最近更新 更多