[英]Inserting values into table from textboxes & from another table's foreign key C#
我試圖從文本框中插入表中的值,並從另一個表中檢索外鍵ID並將其插入。
因此,我有一個包含UserId的用戶表,我希望將此表插入營養日記中,其中包括來自文本框的所有數據(例如,體重,身高,日期等)
我通過使用會話來跟蹤用戶名(lblRegistered)來檢索MemberId,這是我的代碼:
SqlConnection con = new SqlConnection("path for my connection");
con.Open();
SqlCommand cmd = new SqlCommand("select COUNT(*)FROM Members where Username='" + lblRegistered.Text + "'", con);
con.Close();
con.Open();
cmd.CommandText = "INSERT INTO Nutrition(Weight, Height, Bmi, Date, WaterIntake, CalorieIntake, MemberId) values ('" + txtWeight.Text + "','" + txtHeight.Text + "','" + txtBmi.Text + "','" + txtDate.Text + "','" + txtWater.Text + "','" + txtCalorie.Text + "', Select Users.UserId From Users where (Users.Username= '" + lblRegistered.Text + "'))";
cmd.ExecuteNonQuery();
cmd.Clone();
con.Close();
Response.Redirect("Success.aspx");
該錯誤接近“ 選擇用戶”部分。
任何幫助將不勝感激!
第一件事是讀取參數化的SQL查詢。 您所擁有的代碼對SQL注入攻擊完全開放。
這是一個很好的資源: http : //www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html
然后針對該問題,最好使用存儲過程來完成工作。 類似於以下內容:
CREATE PROCEDURE Nutrition_Insert
@weight varchar(10),
@height varchar(10),
@bmi varchar(10),
@date varchar(10),
@username varchar(10),
//etc for your fields
AS BEGIN
DECLARE @memberId varchar(10)
SELECT @memberId = UserId From Users where Username = @username
INSERT INTO Nutrition(Weight, Height, Bmi, Date, WaterIntake, CalorieIntake, MemberId)
values (@weight, @height, @bmi, ....., @memberId)
END
注意-我在那里做了一些假設,因為我不知道您的數據類型,它們都看起來像字符串,但是不知道所用varchar的大小,因此選擇了一個任意值。 用實際字段大小替換(10)。
如果必須使用嵌入式SQL,則這就是參數化的方式。 我還修復了insert語句,以從Members表中提取MemberId作為插入的一部分。
using (var conn = new SqlConnection("YOUR CONNECTION STRING"))
{
conn.Open();
using (
var cmd = new SqlCommand(
"INSERT INTO Nutrition(...fields...) SELECT @Weight, @Height, @Bmi,...., Members.MemberId FROM Members WHERE Members.Username = @Username", conn)
)
{
cmd.Parameters.AddWithValue("@Weight", txtWeight.Text);
cmd.Parameters.AddWithValue("@Height", txtHeight.Text);
...
cmd.Parameters.AddWithValue("@Username", lblRegistered.Text);
cmd.ExecuteNonQuery();
}
conn.Close();
}
您也會注意到using
語句。 這樣可以確保您的連接干凈無處。
希望能有所幫助。
謝謝理查德..那在這個問題上做得很好。 我只是想在不同的頁面上執行相同的技術,但是這次它將有2個where子句
var cmd = new SqlCommand("INSERT INTO AssignPlan(Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId) Select @Reps, @Sets,@WeightOrTime,@Date, Members.MemberId From Members Where Members.Username=@name,ExerciseDisplay.ExerciseId From ExerciseDisplay Where ExerciseDisplay.ExerciseName=@Exercise", conn)
它顯示出語法錯誤。 能做到嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.