【发布时间】:2014-08-12 18:16:07
【问题描述】:
我正在尝试构建一个系统,其中一个字母是从 2 个表中自动生成的。一张表格包含了这封信的所有内容,而另一张表格则列出了接收特定信件的人员。可能有多个人收到同一个字母,所以我尝试进行连接和循环以生成每个字母。
我的问题是我遇到从数组读取时返回的第一个值是数据库中的第二个条目。 IE 我应该有 (Rob, Jess, Alex) 输出,但我得到的是 (Jess, Jess, Alex)。
我不确定我的问题出在哪里。
SQL = "SELECT * FROM S.dbo.letters l INNER JOIN
S.dbo.ds d ON l.sID= d.sID
WHERE l.id=@primaryID";
SqlConnection dbconn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(SQL, dbconn);
dbconn.Open();
cmd.Parameters.AddWithValue("@primaryID", 1);//Session["primIDedit"]
SqlDataReader myReader = cmd.ExecuteReader();
ArrayList letterInfo = new ArrayList();
ArrayList dFname = new ArrayList();
myReader.Read();
while (myReader.Read())
{
dFname.Add(myReader["dfname"]);
foreach (string i in dFname)
{
Label txtLabel1 = new Label(); //Generating a label
txtLabel1.Text = i.ToString();
ph1.Controls.Add(txtLabel1); //writing to a placeholder on the aspx page
//for now I'm just wanting to return all values.
}
sName.Text = myReader[1].ToString()
+ " " + myReader[3].ToString() + " " +
myReader[2].ToString();
paragraph1.Text = myReader[9].ToString();
paragraph2.Text = myReader[10].ToString();
paragraph3.Text = myReader[11].ToString();
signoff.Text = myReader[12].ToString();
}
【问题讨论】:
-
能否简单解释一下这两个表中的相关列?你打算收到什么?
-
您是否试图让代码变得神秘?使用
SELECT *然后myReader[n]令人费解 -
为什么要调用myReader.Read();在while循环之前?这将导致 wile 循环中的第一次迭代是数据读取器中的第二项,因为您已经调用了 Read()。
-
@TJ 这两张表是信件和捐助者。 sID 是我拥有的变量,用于对捐赠者进行分组,因此我可以将一封信发送给该组,但分为单个捐赠者。
-
@christiandev 为什么这令人费解?我应该提一下,这不是一个巨大的数据库,只有 14 列。我几乎使用了全部 14 个字母来生成字母,比你看到的那部分代码更多。