How to create a Stored Procedure from C# /// /// PURPOSE: create an MS Access stored procedure /// UNDONE: while we include the syntax to delete the procedure, we don't test for /// it's existence, so this routine would be run only to set up the database. The procedure /// remains in the database. /// REFERENCE: http://www.devcity.net/net/article.aspx?alias=msaccess_sp /// private void Create_StoredProcedure() { string strDEL = "DROP TABLE UpdateCompanyDetails;"; string strSQL = "CREATE PROC UpdateCompanyDetails ( inID LONG , " + " inCompany VARCHAR(255), " + " inNames VARCHAR(255), " + " inLanguages VARCHAR(255), " + " inAddress VARCHAR(255), " + " inPhone VARCHAR(255), " + " inMisc TEXT, " // If the data type name TEXT is used without specifying // the optional length, for example TEXT(25), a LONGTEXT field is // created. + " inContact VARCHAR(255), " + " inWeb VARCHAR(255) ," + " inAgent BIT, " + " inPriority LONG, " + " inContacted DATETIME " + " ) " + " AS UPDATE tblCompany " + " SET tblCompany.[Company] = inCompany ," + " tblCompany.[Names] = inNames ," + " tblCompany.[Languages] = inLanguages, " + " tblCompany.[Address] = inAddress, " + " tblCompany.[Phone] = inPhone, " + " tblCompany.[Misc] = inMisc, " + " tblCompany.[Contact] = inContact, " + " tblCompany.[Web] = inWeb ," + " tblCompany.[Agent] = inAgent, " + " tblCompany.[Priority] = inPriority, " + " tblCompany.[Contacted] = inContacted " + " WHERE ID=inID;"; try { System.Data.OleDb.OleDbCommand ole_command = new OleDbCommand("",Globals.aConnection); //ole_command.CommandText = strDEL; //ole_command.ExecuteNonQuery(); // delete the query ole_command.CommandText = strSQL; ole_command.ExecuteNonQuery(); // add the query } catch(System.Data.OleDb.OleDbException exO) { Console.WriteLine(strSQL); Console.WriteLine("{0}",exO.ToString()); //System.Windows.Forms.MessageBox.Show(" Error in Add Line: " + exO.Message); } catch( Exception ex) { Console.WriteLine("Error: {0}", ex); } } ************************************************************************** Here's what the stored procedure / query looks like: PARAMETERS inID Long, inCompany Text ( 255 ), inNames Text ( 255 ), inLanguages Text ( 255 ), inAddress Text ( 255 ), inPhone Text ( 255 ), inMisc Text ( 255 ), inContact Text ( 255 ), inWeb Text ( 255 ), inAgent Bit, inPriority Long, inContacted DateTime; UPDATE tblCompany SET tblCompany.Company = inCompany, tblCompany.[Names] = inNames, tblCompany.languages = inLanguages, tblCompany.address = inAddress, tblCompany.phone = inPhone, tblCompany.misc = inMisc, tblCompany.contact = inContact, tblCompany.web = inWeb, tblCompany.agent = inAgent, tblCompany.priority = inPriority, tblCompany.contacted = inContacted WHERE (((tblCompany.ID)=[inID])); But one iteration looked like this !!! UPDATE tblCompany SET Company = [?], [Names] = [?], languages = [?], address = [?], phone = [?], misc = [?], contact = [?], web = [?], agent = [?] WHERE (([ID]=[?]) And (([?]=1 And [Company] Is Null) Or ([Company]=[?])) And (([?]=1 And [Names] Is Null) Or ([Names]=[?])) And (([?]=1 And [languages] Is Null) Or ([languages]=[?])) And (([?]=1 And [address] Is Null) Or ([address]=[?])) And (([?]=1 And [phone] Is Null) Or ([phone]=[?])) And (([?]=1 And [contact] Is Null) Or ([contact]=[?])) And (([?]=1 And [web] Is Null) Or ([web]=[?])) And (([?]=1 And [agent] Is Null) Or ([agent]=[?]))); ************************************************************************** How to use a stored procedure: private void SaveWithStoredProcedure() { OleDbParameter param = new OleDbParameter(); OleDbCommand cmdUpdate = new OleDbCommand("EXECUTE UpdateCompanyDetails", Globals.aConnection); // add all the parameters OleDbParameter paramID = new OleDbParameter(); paramID.ParameterName = "inID"; paramID.OleDbType = OleDbType.Integer; paramID.Size=32; paramID.Value= ID.ToString(); cmdUpdate.Parameters.Add(paramID); OleDbParameter paramCompany = new OleDbParameter(); paramCompany.ParameterName = "inCompany"; paramCompany.OleDbType = OleDbType.VarChar; paramCompany.Size=255; paramCompany.Value=this.txtCompany.Text; cmdUpdate.Parameters.Add(paramCompany); OleDbParameter paramNames = new OleDbParameter(); paramNames.ParameterName = "inNames"; paramNames.OleDbType = OleDbType.VarChar; paramNames.Size=255; paramNames.Value= this.txtNames.Text; cmdUpdate.Parameters.Add(paramNames); OleDbParameter paramLanguages = new OleDbParameter(); paramLanguages.ParameterName = "inLanguages"; paramLanguages.OleDbType = OleDbType.VarChar; paramLanguages.Size=255; paramLanguages.Value= this.txtTechnologies.Text; cmdUpdate.Parameters.Add(paramLanguages); OleDbParameter paramAddress = new OleDbParameter(); paramAddress.ParameterName = "inAddress"; paramAddress.OleDbType = OleDbType.VarChar; paramAddress.Size=255; paramAddress.Value= this.txtAddress.Text; cmdUpdate.Parameters.Add(paramAddress); OleDbParameter paramPhone= new OleDbParameter(); paramPhone.ParameterName = "inPhone"; paramPhone.OleDbType = OleDbType.VarChar; paramPhone.Size=255; paramPhone.Value= this.txtPhone.Text; cmdUpdate.Parameters.Add(paramPhone); OleDbParameter paramMisc = new OleDbParameter(); paramMisc.ParameterName = "inMisc"; paramMisc.OleDbType = OleDbType.VarChar; //paramMisc.Size=255; paramMisc.Value= this.txtMisc.Text; cmdUpdate.Parameters.Add(paramMisc); OleDbParameter paramContact = new OleDbParameter(); paramContact.ParameterName = "inContact"; paramContact.OleDbType = OleDbType.VarChar; paramContact.Size=255; paramContact.Value= this.txtContact.Text; cmdUpdate.Parameters.Add(paramContact); OleDbParameter paramWeb = new OleDbParameter(); paramWeb.ParameterName = "inWeb"; paramWeb.OleDbType = OleDbType.VarChar; paramWeb.Size=255; paramWeb.Value= this.txtWeb.Text; cmdUpdate.Parameters.Add(paramWeb); OleDbParameter paramAgent = new OleDbParameter(); paramAgent.ParameterName = "inAgent"; paramAgent.OleDbType = OleDbType.Boolean; paramAgent.Size=1; paramAgent.Value= this.chkAgent.Checked; cmdUpdate.Parameters.Add(paramAgent); OleDbParameter paramPriority = new OleDbParameter(); paramPriority.ParameterName = "inPriority"; paramPriority.OleDbType = OleDbType.Integer; paramPriority.Size=32; paramPriority.Value=this.cmbPriority.Text; cmdUpdate.Parameters.Add(paramPriority); OleDbParameter paramContacted= new OleDbParameter(); paramContacted.ParameterName = "inContacted"; paramContacted.OleDbType = OleDbType.DBDate; paramContacted.Size=20; if (this.txtContacted.Text != "") paramContacted.Value = this.txtContacted.Text; else paramContacted.Value = System.DBNull.Value; cmdUpdate.Parameters.Add(paramContacted); try { cmdUpdate.ExecuteNonQuery(); } catch(System.Data.OleDb.OleDbException exO) { System.Windows.Forms.MessageBox.Show(" Error in Save of Details: " + exO.ToString() ); Console.WriteLine("{0}",exO.ToString()); } catch( Exception ex) { Console.WriteLine("Error: {0}", ex); } }