我有这个程序,我需要打印出多种商品(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 |
+---------+----------+-----------------+------------+---------------+-----------+
答案 0 :(得分:1)
为每次迭代创建一个新的StreamWriter
意味着每次都会覆盖您的文件。你最终只能得到这里的最后一条记录。
每次迭代读取相同的字段四次将每次都返回相同的内容。记录集仅在您致电Reader.Read()
您应该尝试使用using
语句来控制资源的清理。例如
using (SqlConnection conn = new SqlConnection(connString)) {
using (StreamWriter s = new StreamWriter(UdFil)) {
while (Reader.Read()) {
....
}
}
}
这将合适地关闭Connection
和StreamWriter
。