2017-05-20 70 views
0

我的错误是 类型“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(); 
     } 
    } 
+0

什么是学生表的样子?如果表只有这四个非空字段,你确定你的应用程序中的一个或多个TextBox不是空的吗?最后,文本字段应该放在单引号内,这是你没有做的。 –

回答

0

下面是关于如何在MS Access插入值文章的一部分。 要向表中添加一条记录,必须使用字段列表来定义将数据放入哪些字段,然后您必须将数据本身提供给值列表。要定义值列表,请使用VALUES子句。

例如,以下语句将分别将值“1”,“Kelly”和“Jill”插入到CustomerID,Last Name和First Name字段中。

INSERT INTO tblCustomers(客户ID,[姓氏],[名]) VALUES(1, '凯利', '吉尔')

可以省略字段列表,但只有当你提供记录可以包含的所有值时。

INSERT INTO tblCustomers VALUES(1,凯利, '吉尔', '555-1040', '[email protected]')

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

0

若干观察; 1)您尚未在SQL中指定参数,因此我们只能假定Student表中有四个字段。 2)你不使用命名参数 - 这通常是不好的做法。 3)您正在使用连接值和SQL - 这会使您容易受到SQL注入攻击 4)任何一个文本框可能包含逗号或导致SQL错误的其他SQL格式化字符。

0

我看到的问题可能是因为格式错误的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函数替换$ expression。

相关问题