我有一个关于postgresql中的多个表和在C#中使用sql语句的问题。我有两张桌子
CREATE TABLE "Board"
(
board_id bigserial NOT NULL,
board_serial_number integer NOT NULL,
CONSTRAINT "Board_pkey" PRIMARY KEY (board_id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Board"
OWNER TO postgres;
CREATE TABLE "Defect"
(
defect_id bigserial NOT NULL,
defect_type text,
ref_des text,
board_id integer,
CONSTRAINT "Defect_pkey" PRIMARY KEY (defect_id),
CONSTRAINT "Defect_board_id_fkey" FOREIGN KEY (board_id)
REFERENCES "Board" (board_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
我有一个数据输入表单,总是让用户输入序列号,并输入缺陷类型和ref_Des (代表参考描述或电路板上的零件位置)。
用户可以输入一个缺陷,然后单击一个按钮将该缺陷添加到缺陷表中,用户可以多次执行此操作以添加其他缺陷。
当用户单击保存时,我如何将序列号绑定到添加的所有缺陷?我是数据库编程的新手,我似乎不能理解它,或者如果我使它变得更加困难。请帮帮忙。
发布于 2014-07-31 04:47:35
我想,我不知道这样做是否最有效,但这是我的代码。你怎么认为。我欢迎建设性的批评:)
private void addDefect()
{
try
{
NpgsqlConnection conn = Connection.getConnection();
conn.Open();
DefectType = cboDefectType.Text;
ResDes = txtRefDes.Text;
NpgsqlCommand cmd2 = new NpgsqlCommand("select * from \"Board\" where \"board_serial_number\" = :SerialNumber;", conn);
cmd2.Parameters.Add(new NpgsqlParameter("SerialNumber", SerialNumber));
NpgsqlDataReader dr = cmd2.ExecuteReader();
if (dr.Read())
{
DefectBoardID = dr.GetInt64(0);
cmd2.Dispose();
dr.Dispose();
conn.Close();
}
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand("insert into \"Defect\"(\"defect_type\",\"ref_des\",\"board_id\")" +
"Values(:DefectType,:RefDes,:BoardID);", conn);
cmd.Parameters.Add(new NpgsqlParameter("DefectType", DefectType));
cmd.Parameters.Add(new NpgsqlParameter("RefDes", ResDes));
cmd.Parameters.Add(new NpgsqlParameter("BoardID", DefectBoardID));
int recordInserted = cmd.ExecuteNonQuery();
if (recordInserted == 1)
{
lblError.Text = "Defects Added to Board" + SerialNumber + "!";
}
else
{
lblError.Text = "Defects were not added to Board" + SerialNumber + "!";
}
conn.Close();
cmd.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
https://stackoverflow.com/questions/25045061
复制相似问题