-2

私は新しく、データベースと 2 つのテーブルがあります。

UsersTable contains userID(smallInt),Name,Family
ActivitiesTable contains WorkTime,RestTime,Date,userID(smallInt)

これを1つのDataGridで取得したい(新しいレコードを追加するとき):

userID:A WorkTime: 08:00 RestTime:14:00 Date:12.10.2012
userID:A WorkTime: 08:30 RestTime:14:00 Date:12.11.2012
userID:B WorkTime: 08:00 RestTime:15:00 Date:12.12.2012
.
.
.

(主キーと外部キーを使用して) 両方のテーブルのリレーションを作成するにはどうすればよいですか? どうもありがとう

4

3 に答える 3

1

を使用して作成できます

CREATE TABLE UsersTable (userID smallInt NOT NULL PRIMARY KEY, 
       Name NVARCHAR(255),
       Family NVARCHAR(255))

CREATE TABLE ActivitiesTable (WorkTime DATETIME,
     RestTime DATETIME,Date DATETIME, 
     userID smallInt NOT NULL REFERENCES UsersTable (userid), 
     id int not null identity (1,1))

にid列を追加しましたActivitiesTable。ほとんどの場合、パフォーマンスとスペースのゲインは無視できるため、INTではなくの使用も検討する必要があります。smallint

そして、他の応答が正しく指摘しているように、選択は簡単です

Select v.userID, WorkTime, RestTime, Date   
from userTable user inner join ActivitiesTable activity
on user.userid = activity.userid 
于 2013-01-15T08:02:59.247 に答える
1
SELECT  name, workTime, restTime, [date]
FROM    usersTable u
JOIN    activitiesTable a
ON      a.userId = u.userId
于 2013-01-15T07:58:23.780 に答える
0

userIDをUsersTableの主キーとして、ActivitiesTableの外部キーとして配置します(最終的には、接続が1対1の場合は、主キーとしても配置できます)。次に、DataGridViewにこのスニペットを入力します(データの完全なリストを表示する方法を示しています)。DataBindingを使い続けたい場合は、新しいアイテムを1つずつ追加するのではなく、基になるDataTableを更新してDataGridViewを更新することをお勧めします。

基本的に、最適化は、DataTableに新しい行を追加し、データベースからすべてのデータを取得せずに更新することです(DBに挿入したばかりなので、すでにデータがあるため)。

英語が下手でごめんなさい。私は十分に明確だったと思います。

    try
    {
        var bindingSource1 = new BindingSource();

        // Automatically generate the DataGridView columns.
        dataGridView1.AutoGenerateColumns = true;

        // Set up the data source.
        bindingSource1.DataSource = GetData("Select * From UsersTable Inner Join ActivitiesTable"));
        dataGridView1.DataSource = bindingSource1;

        // Automatically resize the visible rows.
        dataGridView1.AutoSizeRowsMode = 
DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
    }
    catch (SqlException)
    {
        // TODO manage errors
    }
}

private static DataTable GetData(string sqlCommand)
{
    var connectionString = "%your connection string%";
    var northwindConnection = new SqlConnection(connectionString);
    var command = new SqlCommand(sqlCommand, northwindConnection);
    var adapter = new SqlDataAdapter();

    adapter.SelectCommand = command;

    var table = new DataTable();
    table.Locale = System.Globalization.CultureInfo.InvariantCulture;
    adapter.Fill(table);

    return table;
}

PS DBサーバー/エンジンプロバイダーのLinq拡張機能を使用する場合は、ハードコードされたクエリ(SqlCommand +文字列)の代わりに使用できます(以下の回答からコードを取得してください)。

于 2013-01-15T08:08:22.150 に答える