0
我有兩列boatRegNum
和Payerret
。代碼只插入最後一行。有任何想法嗎?
boatRegNum
是字符數據類型和Payerret
是錢的數據類型。
我們正在使用一個GridView創建動態行。第一行是默認創建的。
在該第一行,用戶對boatRegNum
和Payerret
進入值。出於演示的目的,在第一排爲boatRegNum
值B3098
和價值Payerret
爲同一行530.000
。
然後用戶點擊「添加新行」按鈕來添加一個額外的行。在新添加的行中,用戶輸入TY000
代替boatRegNum
和90.00
作爲第二行。
我們到目前爲止遇到的問題是,當這些值插入到數據庫中,僅第二行的值插入到數據庫中。第一行的值總是被忽略。
任何想法我做錯了什麼?
下面是相關的代碼。在此先感謝您的幫助。
標記:
<%foreach (System.Data.DataRow row in dtAirInfoTable.Rows)
{%>
<tr>
<td>
<span class="form-control" style="width: 493px; color: #0093B2; font-weight: bold;">
<%=Convert.ToString(row.ItemArray[1].ToString())%></span>
</td>
<td align="left">
<span class="form-control txtPayerret" style="width: 326px; color: #0093B2; font-weight: bold;">
<%=Convert.ToString(row.ItemArray[2].ToString())%></span>
</td>
</tr>
<% } %>
C#:
// datatable CurrTable
private DataTable LoadTable1(bool createIfMissing)
{
const string ViewStateKey = "CurrTable";
DataTable dt = ViewState[ViewStateKey] as DataTable;
if (createIfMissing)
{
if (dt == null)
{
dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(string)));
dt.Columns.Add(new DataColumn("boatregNum", typeof(string)));
dt.Columns.Add(new DataColumn("Payerret", typeof(string)));
ViewState[ViewStateKey] = dt;
}
if (dt.Rows.Count == 0)
{
DataRow dr = dt.NewRow();
dr["ID"] = 1;
dr["boatregNum"] = string.Empty;
dr["Payerret"] = string.Empty;
dt.Rows.Add(dr);
}
}
return dt;
}
private void SetInitialRow()
{
myMultiView.ActiveViewIndex = 0;
DataTable dt = LoadTable1(true);
Gridview1.DataSource = dt;
Gridview1.DataBind();
}
DataTable regtable = ViewState["CurrTable"] as DataTable;
foreach (DataRow row in regtable.Rows)
{
string txBoatRegNum = row.ItemArray[1].ToString();
string txTaxPayerRet = row.ItemArray[2].ToString();
//prevent money data types from breaking. If user does not enter value, then enter 0 in its place
//This sub will store Marine and Vessel info to the database.
if (txTaxPayerRet != null)
{
if (string.IsNullOrEmpty(txTaxPayerRet))
{
txTaxPayerRet = "0";
}
SqlCommand aircmd = new SqlCommand("sp_saveInfo", conn);
aircmd.CommandType = CommandType.StoredProcedure;
aircmd.Parameters.AddWithValue("@pid", accountnumber.Text);
aircmd.Parameters.AddWithValue("@eID", Request["pageId"]);
aircmd.Parameters.AddWithValue("@tID", tPayerID);
aircmd.Parameters.AddWithValue("@txYr", txtTaxYr.Text);
aircmd.Parameters.AddWithValue("@regno", txBoatRegNum);
aircmd.Parameters.Add("@txretval", SqlDbType.Money).Value = decimal.Parse(txTaxPayerRet); //convert text back to money
aircmd.ExecuteNonQuery();
}
}
存儲過程:
ALTER PROCEDURE [dbo].[sp_saveInfo]
@pid INT,
@eID INT,
@txYr INT,
@regno VARCHAR(50),
@txretval DECIMAL(18, 2),
@tID INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRAN
IF EXISTS (SELECT * FROM Info WHERE pid = @pid)
BEGIN
UPDATE Info
SET EquipmentTypeID = @eID,
TaxYear = @txYr,
AirCraftRegNo = @regno,
TaxPyrRetdVal = @txretval
WHERE pid = @pid
END
ELSE
BEGIN
INSERT INTO [dbo].Info (pid, TaxYear, AirCraftRegNo, EquipmentTypeID, TaxPyrRetdVal, TaxpayerID)
VALUES (@pid, @txYr, @regno, @eID, @txretval, @tID)
END
COMMIT TRAN
END
您在插入語句中使用標量變量。標量一次只能保存一個值,因此您一次只能插入一行數據。你獲得最後一個值的原因是因爲第一個值被第二個值推出,等等......最後一行沒有任何東西可以消除,所以這就是你得到的。 –
幫我先生,我會如何改變這種情況? 我懷疑你的意思是存儲過程。 – Kenny
我可以向你展示使用直接sql的語法,但是當涉及到XML和JSON時,我毫無用處......實際上,我得到了一個可擴展的XML,它被傳遞到一個proc並解析到一個表中。我沒有寫XML部分...讓我看看我能找到什麼。 –