create table Storage ( Gno char (4) primary key, Sno char (4) not null, Gnum int not null check(Gnum=0), foreign key (Sno ) references Storages(Sno), foreign key (Gno) references Goods(Gno) )分析这段代码说说哪里错了
时间: 2024-02-05 18:03:22 浏览: 80
这段代码有两处错误:
1. 创建表格时,表格名应该是"Storage"(单数形式),而不是"Storages"(复数形式)。
2. 在创建外键时,这两行代码的表格名应该互换一下位置,即应该是:
```
foreign key (Sno) references Storages(Sno),
foreign key (Gno) references Goods(Gno)
```
这样才能正确地将"Storage"表格的"Sno"字段关联到"Storages"表格的"Sno"字段,将"Gno"字段关联到"Goods"表格的"Gno"字段。
相关问题
Instoragecreate table Instorage( Gno char (4) not null Indate datetime primary key Userno char (10) not null, Addnum int not null, Sno char (4) not null, foreign key (Gno) references Goods(Gno), foreign key (Sno ) references Storages(Sno), foreign key(Userno) references Users(Userno) ) 分析这段代码并提出改正方法
这段代码有两个问题:
1. 主键的选择不太合理。这里使用了一个复合主键,包括了日期("Indate")和商品编号("Gno")两个字段,这样的主键不太适合表示入库单,因为同一天内可能会有多个入库单,而同一张入库单也不太可能包含多种商品。通常情况下,可以使用自增长的单一主键(比如"ID"字段)来表示入库单。
2. 字段的顺序不太合理。这里将商品编号("Gno")放在了第一位,这样在查询时需要使用复合索引才能高效地查找。通常情况下,可以将主键字段放在第一位,其它字段按照逻辑顺序排列。
为了修正这些问题,可以将代码改为:
```
create table Instorage (
ID int identity(1,1) primary key,
Indate datetime not null,
Gno char(4) not null,
Sno char(4) not null,
Userno char(10) not null,
Addnum int not null,
foreign key (Gno) references Goods(Gno),
foreign key (Sno) references Storage(Sno),
foreign key (Userno) references Users(Userno)
);
```
这里使用了自增长的"ID"作为主键,将主键字段放在第一位,将外键关系修正为正确的表格名和字段名。
namespace WindowsFormsApplication1 { public partial class 修改员工信息 : Form { string SNO=""; public 修改员工信息() { InitializeComponent(); } public 修改员工信息(string sno,string sname,string dname,string dno,string gno) { InitializeComponent(); textBox1.Text=sno; textBox2.Text=sname; textBox3.Text=dno; textBox4.Text=dname; textBox5.Text=gno; } private void button1_Click(object sender, EventArgs e) { string sql = "select* from staff where sno='"SNO"'"; Dao dao=new Dao(); if(dao.Execute(sql)>0) { MessageBox.Show("修改成功"); this.Close(); } } } }
在这段代码中,你定义了一个Windows窗体应用程序的类`修改员工信息`,在这个类中定义了一个变量`SNO`,用于保存员工的编号。你还定义了一个无参的构造函数和一个带有参数的构造函数,用于初始化窗体上的文本框。
在`button1_Click`事件中,你定义了一个SQL查询语句,用于查询员工信息。然而,在这个SQL语句中,你没有将变量`SNO`的值与查询语句中的员工编号进行拼接,导致查询语句不正确。应该修改为:
```csharp
string sql = "select * from staff where sno='" + SNO + "'";
```
接着,你创建了一个`Dao`类对象,并调用其`Execute`方法来执行SQL语句。但是,在代码中并没有对文本框中的修改信息进行更新。你需要修改代码,将文本框中的信息更新到数据库中。比如,修改SQL语句为:
```csharp
string sql = "update staff set sname='" + textBox2.Text + "', dno='" + textBox3.Text + "', dname='" + textBox4.Text + "', gno='" + textBox5.Text + "' where sno='" + SNO + "'";
```
这个SQL语句将员工的姓名、部门编号、部门名称、工种编号更新到数据库中。最后,应该在执行SQL语句后关闭当前窗体,例如:
```csharp
if (dao.Execute(sql) > 0)
{
MessageBox.Show("修改成功");
this.Close();
}
```
阅读全文