2010-08-06 70 views
1

我是c#/。net的新手,剛剛從經典的asp(昨天)切換到它。c#.net post然後寫入到sql db

我正在嘗試一些非常基本的開始。 我有一個約20個問題(文本/ textarea /複選框/下拉菜單/電臺)的靜態窗體,它發佈到提交按鈕的帖子頁面。

我需要帖子頁面來收集答案,並將它們寫入每個問題有1列的sql db。

我沒有這通過請求的每一個形式對象並檢查它是否爲空/空,並且如果沒有,那麼將其放入一個變量然後我創建的存儲的過程,並通過了20個參數,這將插入該記錄。

我的問題是:

是否有.NET自動執行此操作的方法嗎?例如,.net維護狀態與傳統的asp我曾經必須編寫代碼來做到這一點。我想能夠調用某個數組或列表中的答案,然後將其寫入數據庫。 Linq到SQL怎麼樣?

+2

爲什麼每個問題只有一列?您的數據庫表應該每個問題有一行。每行應該用其屬性來表示一個問題。 – 2010-08-06 19:11:38

+1

如果是問卷,則每個回答有一行,每個問題一列。完全合理的,當你不添加/更改/刪除問題。如果需要更改,那麼另一個表/數據庫佈局將是更可取的。 – 2010-08-06 19:22:06

回答

0

您將在您的aspx頁面上有控件,每個問題一個。您仍然需要在回發代碼中獲取每個控件的值,並將其分配給存儲過程中的參數,或者插入包含所有參數的行。

可以使用Linq to SQL,但仍然需要獲取值並將其分配給表對象。

下面是示例僞代碼,其中dataContext是您的linq2sql類,並且表中的列名爲q1,q2。 txtQ1asp:textboxdropDownQ2asp:dropdownlist

var row = new Questionnaire(); 
row.q1 = txtQ1.Text; 
row.q2 = dropDownQ2.SelectedValue; 
// etc 
dataContext.Questionnaires.Insert(row); 
dataContext.SubmitChanges(); 
0

您仍然需要從UI中一次拉一件東西。將它們放置到一個數組或字典或東西是好的,所以你不必應付20個變量,但據我所知,你需要做的是這樣:

var Answers = new Dictionary<string, string>(); 
Answers["firstName"] = tbxFirstName.Text; 
Answers["lastName"] = tbxLastName.Text; 

LINQ到SQL (或EF + Linq to Entities)替代存儲過程/數據庫訪問部分。如果您選擇使用其中之一,則可以簡化上述操作。 Linq to SQL可以根據您的答案數據庫表爲您生成Answers類 - 在這一點上,您可以改爲執行下列操作:

using (var context = new QuestionAnswerContext()) { 
    Answers userAnswers = new Answers(); 
    userAnswers.FirstName = tbxFirstName.Text; 
    userAnswers.LastName = tbxLastName.Text; 

    context.Answers.Insert(userAnswers); 
    context.Answers.SubmitChanges(); 
} 
+0

我用的Mikael的建議,因爲我不是太熟悉字典,它似乎很簡單,使一類等等等等 我使用的LINQ to SQL給exec已傳遞形式row.q1的32個值的存儲過程。 .. row.q32然後submitchanges() 感謝您的幫助。 – Antoni 2010-08-10 18:57:16