[英]inserting data into multiple tables using a web form
我想知道執行以下操作的標准/最佳方式是什么:
我在asp.net中有一個表單Web應用程序並使用C#
用戶將數據輸入表單並單擊INSERT,它將數據插入4個不同的表中。
這些領域是:
primarykey, animal, street, country
該表格允許多個動物,多個街道和每個主鍵的多個國家/地區。 所以,當我有這樣的數據:
[1],[rhino,cat,dog],[luigi st, paul st], [russia,israel]
我需要將它插入到這樣的表中:
table1:
1,rhino
1,cat
1,dog
table2:
1,luigi st
1, paul st
table3:
1,russia
1,israel
問題
我完全不知道如何做到這一點。 如果我只有一個表和每個主鍵一組數據我只會使用InsertQuery並以這種方式做,但因為它是多個表我不知道如何做到這一點?
我應該使用哪些控件來允許用戶輸入多個值? 目前我只是使用文本框並考慮用半冒號分隔條目,但這可能不是正確的方法。
我想建議你利用SQL 2008中新的multirow insert語句,這樣你就可以像這樣傳遞一個sql語句:
INSERT INTO table1(id,animal_name) values (1,cat),(1,dog),(1,horse)...
對於你的SqlCommand但我不知道如何構建一個這樣的語句,而不會冒成SQL注入攻擊的受害者。
另一種方法是在sql數據庫中定義數據表類型:
然后在C#中構造一個與您的數據表類型定義匹配的DataTable:
DataTable t = new DataTable();
t.Columns.Add("id");
t.Columns.Add("animal_name");
foreach(var element in your animals_list)
{
DaraRow r = t.NewRow();
r.ItemArray = new object[] { element.id, element.animal_name };
t.Rows.Add(r);
}
// Assumes connection is an open SqlConnection.
using (connection)
{
// Define the INSERT-SELECT statement.
string sqlInsert = "INSERT INTO dbo.table1 (id, animal_name) SELECT nc.id, nc.animal_name FROM @animals AS nc;"
// Configure the command and parameter.
SqlCommand insertCommand = new SqlCommand(sqlInsert, connection);
SqlParameter tvpParam = insertCommand.Parameters.AddWithValue("@animals", t);
tvpParam.SqlDbType = SqlDbType.Structured;
tvpParam.TypeName = "dbo.AnimalTable";
// Execute the command.
insertCommand.ExecuteNonQuery();
}
在這里閱讀更多 。
或者,如果您熟悉存儲過程,與先前的建議相同,但使存儲過程接收DataTable作為參數。
如果以上都不適合您,請從Connection對象創建一個SqlTranscation,並遍歷每個數據集的每一行,在相應的表中插入記錄,最后提交事務。 這里的例子。
使用前端的復選框。 有一個服務/存儲庫來保存用戶數據。 類似於以下內容:
public void UpdateUserAnimals(Guid userId, string[] animals)
{
using (SqlConnection conn = new SqlConnection("connectionstring..."))
{
using (SqlCommand cmd = new SqlCommand("Insert Into UserAnimals(UserId, Animals) values (@UserId, @Animal)"))
{
conn.Open();
cmd.Parameters.AddWithValue("@UserId", userId);
foreach(string animal in animals)
{
cmd.Parameters.AddWithValue("@Animal", animal);
cmd.ExecuteNonQuery();
}
}
}
}
有更復雜的解決方案,但這很簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.