2013-04-13 49 views
0

我有一个应用程序,它无法从数据库中为这个特定的表单获取数据,而其他表单工作正常。无法从C#中的数据库检索数据

我使用此表单从数据库获取数据,然后将数据显示到另一个表单上的标签上。

用于读取数据的代码是:

string PName, DName, Psex, PPhoneNo, PAddress, Treatment, Teethno, PAge, Amount; 

SqlDataAdapter a = new SqlDataAdapter("Select bills.BillNo,bills.PName,bills.DName,bills.PAge,bills.PSex,bills.PPhoneNo,bills.PAddress,bills.Treatment,bills.Amount,bills.Teethno,addpro.Medicines from bills,addpro where bills.BillNo=" + bno, Program.con); 

DataTable t = new DataTable(); 
a.Fill(t); 
PAge = Convert.ToString(t.Rows[3]); 
Amount = Convert.ToString(t.Rows[8]); 
PName = Convert.ToString(t.Rows[1]); 
DName = Convert.ToString(t.Rows[2]); 
Psex = Convert.ToString(t.Rows[4]); 
PPhoneNo = Convert.ToString(t.Rows[5]); 
PAddress = Convert.ToString(t.Rows[6]); 
Treatment = Convert.ToString(t.Rows[7]); 
Teethno = Convert.ToString(t.Rows[9]); 

frmPrint sa=new frmPrint(); 
sa.start(bno, PAge, Amount, PName, DName, Psex, PPhoneNo, PAddress, Treatment, Teethno); 

当我尝试加载它显示的标签从这个DataTable数据的下一个形式,它提供了以下错误: -

There is no row at position 3.

+2

请不要使用旧式的连接:“从账单,addpro在哪里”。使用新的样式:“从账单INNER JOIN addpro ON ...”。它自1992年以来一直在ANSI SQL标准中。 – StrayCatDBA

回答

0

Your're并且要使用色谱柱:

foreach(DataRow row in t.Rows) 
{ 
     PAge = row["PAge"].ToString(); 
     Amount = row["Amount"].ToString(); 
     PName = row["PName"].ToString(); 
     DName = row["DName"].ToString(); 
     Psex = row["PSex"].ToString(); 
     PPhoneNo = row["PPhoneNo"].ToString(); 
     PAddress = row["PAddress"].ToString(); 
     Treatment = row["Treatment"].ToString(); 
     Teethno = row["Teethno"].ToString(); 
} 

而不是使用数字来标识列,请使用名称。如果查询的顺序因任何原因发生更改,这不会影响您的代码。如果您使用了序号,那么您将需要更改您的行[n]代码,因为订单会发生变化。

+0

谢谢。 解决了这个问题。 – user2257581

0

你正在为每个字段访问不同的行。 你应该访问第一行,然后不同的列:

t.Rows[0].Columns[0] 
t.Rows[0].Columns[1] 
t.Rows[0].Columns[2] 
t.Rows[0].Columns[3] 
... 
+0

给出的错误是System.Data.Datarow不包含列的定义 – user2257581

+0

我不确定实际属性如何被调用,但这就是概念。其他答案应该有正确的语法 – Kenneth

0

好像你需要使用行使用[Columns]

DataTable t = new DataTable(); 
a.Fill(t); 
PAge = Convert.ToString(t.Rows[0]["ColumnsName"]); 
// and so on 
+0

给出的错误,即System.Data.Datarow不包含列的定义 – user2257581

+0

尝试直接使用列名 –