簡體   English   中英

位置(-1)處無行-SQL Server嘗試保存DataTable更改時

[英]No row at position (-1) - SQL Server when trying to save DataTable changes

我有一個Windows窗體數據輸入小程序,用於將數據輸入到小型SQL Server數據庫中。 單擊綁定導航器組件上的AddNewItem按鈕后,嘗試保存新記錄時,我一直看到此錯誤。

錯誤信息

單擊綁定導航器上的保存按鈕時,我的代碼如下所示:

private void btnSave_Click(object sender, EventArgs e)
{
        try
        {
            this.Validate();

            int currentPosition = this.witsStatusDBDataSet.TestCase.Rows.Count - 1;
            WitsStatusDBDataSet.TestCaseRow row = (WitsStatusDBDataSet.TestCaseRow)witsStatusDBDataSet.TestCase.Rows[currentPosition];
            row.AcceptChanges();

            witsStatusDBDataSet.TestCase.AcceptChanges();
            this.testCaseBindingSource.EndEdit();

            int current = witsStatusDBDataSet.TestCase.Rows.Count - 1;

            testCaseTableAdapter.Update(this.witsStatusDBDataSet.TestCase.Rows[current]);
            WitsStatusDBEntry.WitsStatusDBDataSetTableAdapters.TableAdapterManager manager = new TableAdapterManager();
            manager.UpdateAll(witsStatusDBDataSet);

            SysTimer = new System.Timers.Timer(2500);
            statusLabel1.Text = "Updated successfully.";
            SysTimer.Start();
        }
        catch(Exception exc)
        {
            string msg = exc.Message + " : " + exc.StackTrace;
            Clipboard.SetText(msg);
            MessageBox.Show(msg);
        }
}

如果我在SQL Server Mgmt Studio中手動輸入數據,則綁定導航器將成功加載該數據,並且我可以成功使用Move Next和Move Previous。

但是,如果我剛部署了一個全新的數據庫,沒有任何記錄,則會收到此錯誤。

我檢查了StackOverflow是否存在類似問題,但似乎沒有什么是相同的情況。

我根據梅森的評論重新編碼了該方法。 這是工作代碼:

private void btnSave_Click(object sender, EventArgs e)
    {
        try
        {
            WitsStatusDBDataSet.TestCaseRow row = null;
            this.Validate();

            int currentPosition = this.witsStatusDBDataSet.TestCase.Rows.Count - 1;
            if(currentPosition == -1)
            {
                row = AddRowToDataTable(testCase: witsStatusDBDataSet.TestCase);
            }

            if (row == null)
            {
                currentPosition = this.witsStatusDBDataSet.TestCase.Rows.Count - 1;
            }
            row.AcceptChanges();

            witsStatusDBDataSet.TestCase.AcceptChanges();
            this.testCaseBindingSource.EndEdit();

            testCaseTableAdapter.Update(row);
            testCaseTableAdapter.InsertCase(row.Title, row.IsAutomated, row.Description, row.State, row.Area, row.Iteration, row.Priority,
                row.Severity, row.Owner, row.CreatedDate, row.ModifiedDate, row.TFS_Case_ID, row.TFSInstance);


            WitsStatusDBEntry.WitsStatusDBDataSetTableAdapters.TableAdapterManager manager = new TableAdapterManager();
            manager.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=WitsStatusDB;Integrated Security=True");
            manager.UpdateAll(witsStatusDBDataSet);

            SysTimer = new System.Timers.Timer(2500);
            statusLabel1.Text = "Updated successfully.";
            SysTimer.Start();
        }
        catch(Exception exc)
        {
            string msg = exc.Message + " : " + exc.StackTrace;
            Clipboard.SetText(msg);
            MessageBox.Show(msg);
        }
    }

注意,我必須調用“ AddRowToDataDable()”-該方法只是將Windows窗體的內容傳輸到TestCaseRow對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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