1
我有一個程序檢查Access數據庫中的表格,以查看2行,並允許用戶通過文本框更改ComplexityFactor列。如果在應用程序加載2行時創建的行不存在(除了OHorUG字段,所有字段都是相同的)。根據用戶選擇的行,用戶可以更改所選行的ComplexityFactor字段。我已經能夠成功地創建和讀取行,但我無法更新1字段。使用C更新Access錶行#
這裏是更新代碼:
private void button1_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count != 0)
{
ListViewItem selected = listView1.SelectedItems[0];
OleDbCommand updateCmd = new OleDbCommand();
myConnection.Open();
updateCmd.CommandType = CommandType.Text;
updateCmd.CommandText = "UPDATE Contractors SET ComplexityFactor = @ComplexityFactor" +
" WHERE Division = @Division AND ComplexityFactorCode = @ComplexityFactorCode AND ContractNumber = @ContractNumber AND ContractorCode = @ContractorCode AND ContractorName = @ContractorName AND OHorUG = @OHorUG)";
updateCmd.Parameters.AddWithValue("@ComplexityFactor", textBox1.Text.ToString());//FYI this field is a Number in Access
updateCmd.Parameters.AddWithValue("@Division", "SV");
updateCmd.Parameters.AddWithValue("@ComplexityFactorCode", "X01");
updateCmd.Parameters.AddWithValue("@ContractNumber", "0");
updateCmd.Parameters.AddWithValue("@ContractorCode", "SSI");
updateCmd.Parameters.AddWithValue("@ContractorName", "SunStream Inc");
updateCmd.Parameters.AddWithValue("@OHorUG", selected.SubItems[6].Text.ToString());
updateCmd.Connection = myConnection;
updateCmd.ExecuteNonQuery();
myConnection.Close();
}
else
{
MessageBox.Show("Please select a row to update...");
}
我忘了添加例外:
System.Data.OleDb.OleDbException was unhandled
Message=Extra) in query expression 'Division = @Division AND ComplexityFactorCode = @ComplexityFactorCode AND ContractNumber = @ContractNumber AND ContractorCode = @ContractorCode AND ContractorName = @ContractorName AND OHorUG = @OHorUG)'.
Source=Microsoft JET Database Engine
ErrorCode=-2147217900
StackTrace:
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
at WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) in c:\Users\s153720\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs:line 199
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at WindowsFormsApplication1.Program.Main() in c:\Users\s153720\AppData\Local\Temporary Projects\WindowsFormsApplication1\Program.cs:line 18
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
Holy CRAP!就是這樣!聲明結尾處的「)」。我盯着這幾個小時,嘗試了一些完全混淆不清的東西,爲什麼它不起作用! – lentz
謝謝@ JLC007 – lentz
不客氣! –