打印多个属性

时间:2012-12-13 13:35:52

标签: c# sql arrays file io

我有这个程序,我需要打印出多种商品(vare)的属性。我遇到的问题是它只会多次打印出单个项目的属性。我尝试将属性放入二维数组中,但它仍然打印出相同的属性。我的输出文件是.txt文件。我想要的是,程序打印出商品清单,每个商品都显示各自的属性。 (有4个不同的项目,6个不同的属性)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.IO;

namespace Opgave_4._1
{
  class Program
{

        static void Main()
 {
    string connString;
    connString = "Data Source=(local);Initial Catalog=Occhi che guardano;Integrated Security=SSPI";

    string sqlstring = "SELECT * FROM Vare ORDER BY Vare.Varenavn";

    Console.WriteLine(sqlstring);

    SqlConnection conn = new SqlConnection(connString);
    SqlCommand cmd = new SqlCommand(sqlstring, conn);
    conn.Open();
    SqlDataReader Reader = cmd.ExecuteReader();

    string att1;
    decimal att2;
    int att3;
    string att4;
    int att5;
    string att6;
    string[,] vareliste = new string[10, 10];
    StreamWriter Stream = null;
    String UdFil = "C:\\Users\\Thomas\\Desktop\\text.txt";
    Stream = new StreamWriter(UdFil);
    try
    { 
        while (Reader.Read())
        {
            if (Reader.IsDBNull(0))
                att1 = "hej";
            else
                att1 = Reader.GetString(0);
            if (Reader.IsDBNull(1))
                att2 = 0.0006000M;
            else
                att2 = Reader.GetDecimal(1);
            if (Reader.IsDBNull(2))
                att3 = 12;
            else
                att3 = Reader.GetInt32(2);
            if (Reader.IsDBNull(3))
                att4 = "hej";
            else
                att4 = Reader.GetString(3);
            if (Reader.IsDBNull(4))
                att5 = 14;
            else
                att5 = Reader.GetInt32(4);
            if (Reader.IsDBNull(5))
                att6 = "hejsa";
            else
                att6 = Reader.GetString(5);




            Stream.WriteLine(att1 + " " + att2 + " " + att3 + " " + att4 + " " + att5 + " " + att6);

            try
            {

            }
            catch (Exception e)
            {
                Console.WriteLine("Fejl i sti  {0}", e.ToString());
                Console.ReadLine();
            }
            finally
            {
                if (Stream != null)
                    Stream.Close();
            }


        }

    }

    catch (System.Data.SqlClient.SqlException e)
    {
        Console.WriteLine(e.Message);
    }
    finally
    {
        Reader.Close(); // luk ResultSet
        conn.Close(); // luk connection igen
    }

}

    }
}

这是打印输出(编辑(删除finally子句后)):

1234 1200,0000 5 Aviator 1111 Raiban
1234 1200,0000 5 Aviator 1111 Raiban
1234 1200,0000 5 Aviator 1111 Raiban
4321 110,0000 6 Femme 1111 Hindberg
4321 110,0000 6 Femme 1111 Hindberg
4321 110,0000 6 Femme 1111 Hindberg
3241 500,0000 2 Pilot-etui 3333 Raiban
3241 500,0000 2 Pilot-etui 3333 Raiban
3241 500,0000 2 Pilot-etui 3333 Raiban
1423 250,0000 30 Splash 4444 Lensway
1423

(如果我在for循环中使用小于3的整数,则由于某种原因不打印任何内容)

表中的数据是

Pris =价格。 Lager =存储。安塔尔=金额。 Gruppe = Group。 Mærke= Brand

+---------+----------+-----------------+------------+---------------+-----------+
| Vare_id | Varepris | VareLager_antal |  Varenavn  | Varegruppe_nr | Varemærke |
+---------+----------+-----------------+------------+---------------+-----------+
|    1234 | 1200     |               5 | Aviator    |          1111 | Raiban    |
|    1423 | 250      |              30 | Splash     |          4444 | Lensway   |
|    3241 | 500      |               2 | Pilot-etui |          3333 | Raiban    |
|    4321 | 110      |               6 | Femme      |          1111 | Hindberg  |
+---------+----------+-----------------+------------+---------------+-----------+

1 个答案:

答案 0 :(得分:1)

为每次迭代创建一个新的StreamWriter意味着每次都会覆盖您的文件。你最终只能得到这里的最后一条记录。

每次迭代读取相同的字段四次将每次都返回相同的内容。记录集仅在您致电Reader.Read()

时继续

您应该尝试使用using语句来控制资源的清理。例如

using (SqlConnection conn = new SqlConnection(connString)) {
    using (StreamWriter s = new StreamWriter(UdFil)) {
        while (Reader.Read()) {
           ....
        }
    }
}

这将合适地关闭ConnectionStreamWriter