簡體   English   中英

從文本框和另一個表的外鍵C#向表中插入值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM