[英]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.