No value given for one or more required parameters When all parameters are given

不问归期 提交于 2019-12-12 05:14:41

问题


The Error i get is An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll

Additional information: No value given for one or more required parameters.

but this is when all parameters a present code bellow:

private OleDbDataReader dbReader;// Data Reader object
    string sConnection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb";
    string sql;
    OleDbConnection dbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb");
    OleDbCommand dbCommand;

public class ComboboxItem
    {
        public string Text { get; set; }
        public object Value { get; set; }

        public override string ToString()
        {
            return Text;
        }
    } 

private void bAdd_Click(object sender, EventArgs e)
    {
        {
            dbConn = new OleDbConnection(sConnection);

            dbConn.ConnectionString = sConnection;


            dbConn.Open();
            string code = (cBQualification.SelectedItem as ComboboxItem).Value.ToString();
            string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")";
            Console.WriteLine("Test 'sqlinsert' "+ sqlinsert);

            dbCommand = new OleDbCommand(sqlinsert, dbConn);

            dbCommand.ExecuteNonQuery();
        }
    }

回答1:


Here is part of the article about how to insert values in MS Access. To add one record to a table, you must use the field list to define which fields to put the data in, and then you must supply the data itself in a value list. To define the value list, use the VALUES clause.

For example, the following statement will insert the values "1", "Kelly", and "Jill" into the CustomerID, Last Name, and First Name fields, respectively.

INSERT INTO tblCustomers (CustomerID, [Last Name], [First Name]) VALUES (1, 'Kelly', 'Jill')

You can omit the field list, but only if you supply all the values that record can contain.

INSERT INTO tblCustomers VALUES (1, Kelly, 'Jill', '555-1040', 'someone@microsoft.com')

Source MSDN How to: Insert, Update, and Delete Records From a Table Using Access SQL




回答2:


A number of observations; 1) You haven't specified the parameters in the SQL so we can only assume that there are four fields in the Student table. 2) You are not using named parameters - this is generally poor practise. 3) You are using concatenated values and SQL - this will leave you vulnerable to a SQL Injection attack 4) Any one of the text boxes might include a comma or other SQL formatting characters leading to SQL errors.




回答3:


The problem I see may be because of malformed SQL Statement. The string values( NVARCHAR, VARCHAR) should be enclosed within single quotes which I believe is not how you're doing now with following statement

string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")";

Try changing the SQL Statement to

string sqlinsert = $"INSERT INTO Student VALUES ({tBStudentNum.Text}, '{tBStudentName.Text}', {tBCellNo.Text}, '{code}')";

I've made an assumption in above case that tBStudentNum.Text and tBCellNo.Text are numeric values. If not, you can make appropriate changes to put the values inside single quote.

If you're using lower version of .net/C#, replace the $ expression with string.format function.



来源:https://stackoverflow.com/questions/44089297/no-value-given-for-one-or-more-required-parameters-when-all-parameters-are-given

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!