2016-11-01 8 views
0

データベースに2つのテーブル(ユーザーと都市)があり、Usersテーブルの列UserID = 1のすべてのデータを選択します。C# - SQLからDatasetへの2つのテーブルからデータを選択

しかし、データセットは、私のテーブル(ユーザおよび都市)

を見つけることができません。これは私のSQLクエリです:

SELECT * FROM Users INNER JOIN Cities ON Cities.CityID=Users.CityID WHERE Users.UserID=1 

そして、これはMathodです:

public static DataSet GetData(string SqlQuery) 
{ 
    OleDbConnection con = new OleDbConnection(conString); 
    OleDbCommand cmd = new OleDbCommand(SqlQuery, con); 
    OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 
    return ds; 
} 

コード:

DataSet ds = GetData(myQuery); 

    string fname = ds.Tables["Users"].Rows[0]["UserFisrtName"].ToString(); 
    string lname = ds.Tables["Users"].Rows[0]["UserLastName"].ToString(); 
    string city = ds.Tables["Cities"].Rows[0]["CityName"].ToString(); 

    string output = "Name: " + fname + " " + lname + " City: " + city; 
+0

チェック[this](http://stackoverflow.com/questions/11345761/how-to-fill-dataset-with-multiple-tables) – Badiparmagi

+0

SQLデータベースにSQLClientではなくoleDBを使用しているのはなぜですか?接続文字列にデータベース名が指定されていない場合は、クエリにUSE XXXdbを追加する必要があります。 – jdweng

+0

私はアクセスデータベースを使用しています –

答えて

1

yデータセット内に2つのデータセットが必要な場合は、SQLクエリーをこれに変更します。

SELECT * FROM Users WHERE Users.UserID=1; select * from City where CityID in (Select cityid from users where userID = 1); 

ユーザテーブルは、ds.Tables [0]にあり、都市テーブルはds.Tables [1]になります。

接続などが適切に処理されていることを確認するには、句を必ず使用してください。

public static DataSet GetData(string SqlQuery) 
{ 
    using(var con = new OleDbConnection(conString)) 
    using(var cmd = new OleDbCommand(SqlQuery, con)) 
    using(var da = new OleDbDataAdapter(cmd)) 
    { 
     var ds = new DataSet(); 
     da.Fill(ds); 
     return ds; 
    } 
} 

コード:

var ds = GetData(myQuery); 
var fname = ds.Tables[0].Rows[0]["UserFisrtName"].ToString(); 
var lname = ds.Tables[0].Rows[0]["UserLastName"].ToString(); 
var city = ds.Tables[1].Rows[0]["CityName"].ToString(); 
var output = "Name: " + fname + " " + lname + " City: " + city; 
0

私は、答えを見つけたデータセット内のSQLクエリ

SELECT * FROM Users, Cities WHERE Users.CityID=Cities.CityID AND Users.UserID=1 
+0

古いスタイルの結合を使用すると、_two_テーブルが 'DataSet'に追加されますと言っていますか? –

+0

EEP!それは恐ろしいです、私は10年以上の構文を参照してくださいhavent。テーブルを結合するときに "JOIN"構文を使用してください... – Theo

0

であなたのテーブルが自動的に彼らがいるからテーブルの名前を持っていません。選択された。代わりに序数を使用してください:あなたは一つだけのテーブルでデータセットを満たしている

DataSet ds = GetData(myQuery); 
string fname = ds.Tables[0].Rows[0]["UserFisrtName"].ToString(); 
string lname = ds.Tables[0].Rows[0]["UserLastName"].ToString(); 
string city = ds.Tables[0].Rows[0]["CityName"].ToString(); 

string output = "Name: " + fname + " " + lname + " City: " + city; 
+0

それは動作しません –

+0

私は私の応答を修正しました。 2つの異なる表から選択していても、結合によってデータの単一の「表」が作成されることに注意してください。このように、データセットを返す必要はありません。単にデータリーダーを使用するだけです。つまり、あなたが扱うすべての列は 'Tables [0]'で利用できるはずです。 – Theo

0

、これは、SQL文は、データのみの1セットを返すため。索引を使用する表にアクセスするには、列名のみが表の行にマップされるため、この値は索引または名前でアクセスできます。あなたがすべてまたは誰かそれのTE順序を変更を使用しない場合は、すでに提供を使用し、唯一の代わりにすべてのテーブルの列を検索するためのデータベースエンジンを強制するため

SELECT * FROM Users INNER JOIN Cities ON Cities.CityID=Users.CityID WHERE Users.UserID=1 

も使用SELECT *これを避けます表では、将来の問題になる可能性があります。

関連する問題