没有为一个或多个必需参数给出值 当给出所有参数时
No value given for one or more required parameters When all parameters are given
我得到的错误是
'System.Data.OleDb.OleDbException' 类型的未处理异常发生在 System.Data.dll
中
附加信息:没有为一个或多个必需参数提供值。
但这是当所有参数都出现在下面的代码中时:
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();
}
}
这是有关如何在 MS Access 中插入值的文章的一部分。
要将一条记录添加到 table,您必须使用字段列表来定义将数据放入哪些字段,然后您必须在值列表中提供数据本身。要定义值列表,请使用 VALUES 子句。
例如,以下语句将值“1”、"Kelly" 和 "Jill" 分别插入 CustomerID、Last Name 和 First Name 字段。
INSERT INTO tblCustomers (CustomerID, [Last Name], [First Name])
VALUES (1, 'Kelly', 'Jill')
您可以省略字段列表,但前提是您提供记录可以包含的所有值。
INSERT INTO tblCustomers VALUES (1, Kelly, 'Jill', '555-1040',
'someone@microsoft.com')
来源MSDN How to: Insert, Update, and Delete Records From a Table Using Access SQL
一些观察:
- 您没有在SQL中指定参数,所以我们只能假设Student中有四个字段table。
- 您没有使用命名参数 - 这通常是不好的做法。
- 您正在使用连接值和 SQL - 这会使您容易受到 SQL 注入攻击
- 任何一个文本框都可能包含逗号或其他 SQL 格式字符,从而导致 SQL 错误。
我看到的问题可能是因为 SQL 语句格式错误。字符串值(NVARCHAR、VARCHAR)应该用单引号引起来,我认为这不是您现在使用以下语句
的方式
string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")";
尝试将 SQL 语句更改为
string sqlinsert = $"INSERT INTO Student VALUES ({tBStudentNum.Text}, '{tBStudentName.Text}', {tBCellNo.Text}, '{code}')";
我在上述情况下假设 tBStudentNum.Text 和 tBCellNo.Text 是数值。如果没有,您可以进行适当的更改以将值放在单引号内。
如果您使用的是较低版本的 .net/C#,请将 $ 表达式替换为 string.format 函数。
我得到的错误是 'System.Data.OleDb.OleDbException' 类型的未处理异常发生在 System.Data.dll
中附加信息:没有为一个或多个必需参数提供值。
但这是当所有参数都出现在下面的代码中时:
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();
}
}
这是有关如何在 MS Access 中插入值的文章的一部分。 要将一条记录添加到 table,您必须使用字段列表来定义将数据放入哪些字段,然后您必须在值列表中提供数据本身。要定义值列表,请使用 VALUES 子句。
例如,以下语句将值“1”、"Kelly" 和 "Jill" 分别插入 CustomerID、Last Name 和 First Name 字段。
INSERT INTO tblCustomers (CustomerID, [Last Name], [First Name]) VALUES (1, 'Kelly', 'Jill')
您可以省略字段列表,但前提是您提供记录可以包含的所有值。
INSERT INTO tblCustomers VALUES (1, Kelly, 'Jill', '555-1040', 'someone@microsoft.com')
来源MSDN How to: Insert, Update, and Delete Records From a Table Using Access SQL
一些观察:
- 您没有在SQL中指定参数,所以我们只能假设Student中有四个字段table。
- 您没有使用命名参数 - 这通常是不好的做法。
- 您正在使用连接值和 SQL - 这会使您容易受到 SQL 注入攻击
- 任何一个文本框都可能包含逗号或其他 SQL 格式字符,从而导致 SQL 错误。
我看到的问题可能是因为 SQL 语句格式错误。字符串值(NVARCHAR、VARCHAR)应该用单引号引起来,我认为这不是您现在使用以下语句
的方式string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")";
尝试将 SQL 语句更改为
string sqlinsert = $"INSERT INTO Student VALUES ({tBStudentNum.Text}, '{tBStudentName.Text}', {tBCellNo.Text}, '{code}')";
我在上述情况下假设 tBStudentNum.Text 和 tBCellNo.Text 是数值。如果没有,您可以进行适当的更改以将值放在单引号内。
如果您使用的是较低版本的 .net/C#,请将 $ 表达式替换为 string.format 函数。