如何从SQL存储过程中获取数据并将其写入多维数组?

时间:2016-02-12 17:43:01

标签: c# multidimensional-array

我在创建一个可以运行存储过程并将该数据保存到多维数组的方法时遇到了一些麻烦。在我的下面的代码中,我使用.ExecuteReader()而不是.ExecuteNonQuery(),因为我不知道我是否要传递查询或存储过程,所以我想我会保持原样。

这是我的代码,用于连接数据库,然后保存到数组(List)。如果我的查询/存储过程仅返回一行数据,这对我来说很好,但是如果我尝试返回多行数据,它将停止工作。我知道我已经非常接近工作了但是我无法让最后一部分工作。我尝试做的一些事情是保存到List<列表与LT;串GT;>但是当我试图保存它时,它一直给我错误。我还尝试制作两个单独的List<串GT;然后将它们连接在一起,遗憾的是它们也无法正常工作。

public static List<string> CreateSqlConnection( string query, string sqlConn )
    {
        List<string> dataCollection = new List<string>();

        SqlConnection myConn = new SqlConnection( sqlConn );
        SqlCommand command = new SqlCommand( query, myConn );
        SqlDataReader reader;

        try
        {
            myConn.Open();
            reader = command.ExecuteReader();

            while ( reader.Read() )
            {
                for ( int i = 0; i < reader.FieldCount; i++ )
                {
                    dataCollection.Add( Convert.ToString( reader[i] ) );
                }
            }

            myConn.Close();
            return dataCollection;
        }
        catch (SqlException ex)
        {
            Console.WriteLine("Error ({0}): {1}", ex.Number, ex.Message);
            return null;
        }
        catch ( Exception ex )
        {
            Console.WriteLine("Error ({0}): ", ex.Message);
            Console.WriteLine( ex.StackTrace );
            return null;
        }
        finally
        {
            myConn.Dispose();
        }
    }

我对编写多维数组的经验很少,但是在google的帮助下,我写了一些从文件中读取的内容并将保存到多维数组中,以后我可以用它进行解析。

public void ArrayTest(int rowsInArray, int columnsInArray)
    {
        string input = File.ReadAllText(@"File Name to read from"); // Removed temporarily the file name.
        int i = 0, j = 0;

        string[,] result = new string[rowsInArray, columnsInArray];
        foreach (var row in input.Split('\n'))
        {
            j = 0;
            foreach (var column in row.Trim().Split(','))
            {
                result[i, j] = column.Trim();
                j++;
            }
            i++;
        }
    }

另外,我读到Jagged数组更好用于效率,但我无法让Jagged数组能够获得行和列的“动态”大小。

任何有关创建此类内容的帮助都将受到高度赞赏。

编辑:我忘了提到我尝试将数据保存到DataTable中,但我无法将其用于我之后计划使用数据的方式。

1 个答案:

答案 0 :(得分:1)

像这样的东西(剪掉一些东西)

List<List<string>> dataCollection = new List<string>();
List<string> rowCollection;

while ( reader.Read() )
{
    rowCollection = new List<string>();
    for ( int i = 0; i < reader.FieldCount; i++ )
    {
        rowCollection.Add( Convert.ToString( reader[i] ) );
    }
    dataCollection.add(rowCollection);
}