2011-05-09 76 views
0

我正在構建一個訓練項目,而且我的處理程序已經禁止我參數化,我更喜歡現在關注其他的東西。他指示我使用以下類型的字符串來插入。我知道這是不安全的。這不是用於實際部署。然而,我遇到了困難,因爲在對數據庫進行一些必要的重構之後,我需要重新編寫插入和選擇命令。我的提交表有一個自動遞增的SubmissionId列,我需要將該值插入到我的代理和客戶表的SubId列中。我該怎麼做呢?將自動遞增的值插入到另一個表的列中?

string idQuery = "SELECT SCOPE_IDENTITY() AS LastInsertedSubmissionId"; 

String custQuery = "INSERT INTO Customer 
         (CustId, CustName, SicNaic, CustAdd, CustCity, CustState, CustZip, SubId)   
        VALUES 
         ('" + TbCustId.Text + "', '" + TbCustName.Text + "', '" + RblSicNaic.SelectedItem + "', '" + TbCustAddress.Text + "', '" + TbCustCity.Text + "', '" + DdlCustState.SelectedItem + "', '" + TbCustZip.Text + "', *whatgoeshere?*)"; 
String broQuery = "INSERT INTO Broker 
        (BroId, BroName, BroAdd, BroCity, BroState, BroZip, EntityType, SubId) 
        VALUES 
        ('" + TbBroId.Text + "', '" + TbBroName.Text + "', '" + TbBroAddress.Text + "', '" + TbBroCity.Text + "', '" + DdlBroState.SelectedItem + "', '" + TbBroZip.Text + "', '" + DdlEntity.SelectedItem + "', *whatgoeshere?*)"; 

String subQuery = "INSERT INTO Submission 
        (Coverage, CurrentCoverage, PrimEx, Retention, EffectiveDate, Commission, Premium, Comments) 
        VALUES 
        ('" + TbCoverage.Text + "','" + TbCurrentCoverage.Text + "','" + TbPrimEx.Text + "','" + TbRetention.Text + "','" + TbEffectiveDate.Text + "','" + TbCommission.Text + "','" + TbPremium.Text + "','" + TbComments.Text + "')"; 

回答

1

查找到DbCommand/SqlCommand.ExecuteScalar()執行你的第一個查詢。

var id = cmd.ExecuteScalar(idQuery) 

將得到你最後插入的自動id行的id。

我想你可以用你得到的值回全部更換*whatgoeshere?*

SqlCommand msdn page有,你可以參考一個很好的例子。

0

你想先運行此代碼:

SET IDENTITY_INSERT Customer ON; 

然後你可以運行你的INSERT語句。設置完畢後,運行該語句:

SET IDENTITY_INSERT Customer OFF; 
+0

我認爲OP希望使用剛剛插入自動遞增的ID,而不是插入到該表。 – 2011-05-09 01:15:49

0

首先,如果可以的話,我可能會把它變成存儲的程序。如果你把所有這些都放到一個SP中。然後你就可以從最後插入提交表搶的subID:

 

declare @subID int 
set @subID = (SELECT SCOPE_IDENTITY() AS LastInsertedSubmissionId) 
 

現在你可以在隨後的查詢中使用@subID ..

如果不能使成SP這一點,那麼你需要執行在idQuery第一(使用SqlCommand.ExecuteScalar()),然後得到的結果,並將其保存到你的代碼變量..然後使用您的後續查詢..這樣的事情:

 

var subID = cmd.ExecuteScalar(idQuery) 
 

我之所以我所說的將所有內容放在SP中是因爲它更容易掌握tain,而且我認爲根據你的代碼判斷,你應該對整個事情進行交易 - 你不希望客戶查詢工作,然後代理查詢失敗,更正?您將失去數據完整性,因爲現在您的客戶表中會增加一行。

您還可以使用DB交易從你的代碼,但它是一個有點複雜:http://www.knowdotnet.com/articles/transactions.html

相關問題