2013-04-13 89 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

嘗試直接使用列名 –