各位前輩大家好,目前透過Table A的P_ID欄位來搜尋Table B做資料查詢
但同一個P_ID會有重複新增固定五比資料的情況如圖二
目前是想用資料建立的時間來做為搜尋的條件
但是不知從何做起,想請問各位前輩可以在SQL就設定完條件呈現在GridView上
還是要再ASP.NET C#做處理呢???
Table A.
Table B.
搜尋後結果
private void loadGridData2()
{
string constr = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = "SELECT P_ID FROM Patient_infor WHERE P_ID LIKE '%' + @P_ID + '%'";
cmd.Connection = con;
cmd.Parameters.AddWithValue("@P_ID", txtSearch.Text.Trim());
DataTable dt = new DataTable();
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
sda.Fill(dt);
GridView2.DataSource = dt;
GridView2.DataBind();
}
}
}
}
我已經在SQL設定好Table B新增一個FK欄位(Pa_infor_ID) 來關聯Table A (Pa_infor_ID) PK 欄位(此欄位是自動編號)
請問在C#要INSERT Table A PK值到 Table B FK 值 語法要怎麼做呢??
先建立一個FK(PersonID)測試Script
來模擬一個使用者下兩個訂單情況
CREATE TABLE Persons (
PersonID int NOT NULL PRIMARY KEY,
Name varchar(255) NOT NULL
);
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
insert Persons (PersonID,Name) values (1,N'weihan');
public static void loadGridData2()
{
string constr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=c:\users\hanyang\source\repos\ConsoleApp7\ConsoleApp7\Database1.mdf;Integrated Security=True";
using (SqlConnection con = new SqlConnection(constr))
{
con.Open();
using (SqlTransaction ts = con.BeginTransaction())
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = con;
cmd.Transaction = ts;
//模擬:使用者登入、確認
cmd.CommandText = "SELECT * FROM Persons where PersonID = @PersonID ";
cmd.Parameters.AddWithValue("@PersonID", 2);
DataTable dt = new DataTable();
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
sda.Fill(dt);
if (dt.Rows.Count==0)
throw new Exception("沒有此使用者,不能下訂單!");
//模擬:使用者下兩筆訂單
cmd.CommandText = @"
insert Orders (OrderID,OrderNumber,PersonID) values (2,2,@PersonID);
insert Orders (OrderID,OrderNumber,PersonID) values (3,3,@PersonID);
";
var count_insert = cmd.ExecuteNonQuery();
//確定交易送出到DB
ts.Commit();
}
}
}
1 使用transation確保區塊運行沒有錯誤,才把資料送出到DB
2 共用一個FK參數(以例子來說就是@PersonID)
解決你的問題
INSERT Table A PK值到 Table B FK 值
你的資料庫設計不是很好,
通常我們會有一個資料表,
一筆訂單就只有一個編號,
甚至你要拿這個編號來當主鍵也可以,
然後這筆訂單有5項,
另外一個資料表存5項,
然後用主鍵關聯到這個資料表,
如果每一項還需要好幾筆細節,
另外再開一個資料表.