-2

我是新手,有一个数据库和两个表:

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

我想在一个 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
SELECT  name, workTime, restTime, [date]
FROM    usersTable u
JOIN    activitiesTable a
ON      a.userId = u.userId
于 2013-01-15T07:58:23.780 回答
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 回答
0

将 userID 作为主键放在 UsersTable 中,作为外键放在 ActivitiesTable 中(如果连接是一对一的,最终您也可以将其作为主键)。然后用这个片段填充你的 DataGridView(它显示了如何显示一个完整的数据列表)。如果你想继续使用DataBinding,我建议不要一一添加全新的项目,而只是刷新底层DataTable和刷新DataGridView。

基本上,优化可能是向 DataTable 添加新行并刷新而不从数据库中获取所有数据(因为已经有了它,因为您刚刚将它插入到数据库中)。

对不起,我的英语不好。我希望我足够清楚。

    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 回答