未处理OleDBException没有给出一个或多个参数的值

时间:2012-05-15 19:01:40

标签: c# ms-access oledb

我正在尝试从C#更新访问数据库中的表。

这是一个.mdb类型的数据库。

这是我正在使用的连接字符串。       public MainWindow() {

InitializeComponent();

OleDbConnection cn= new OleDbConnection();}
cn.ConnectionString=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" 
    + "C:\Users\Angela\Documents\Visual Studio 2010\Projects\Havnefoged11.mdb;" 
    + "User Id=;Password=;";

cn.Open();

Application.Current.Properties["DBConnection"] = cn;

该文件位于正确的文件夹C:\ Users \ Angela \ Documents \ Visual Studio 2010 \ Projects

 private void button1_Click_1(object sender, RoutedEventArgs e)
    {

 OleDbConnection conn =             

 (OleDbConnection)Application.Current.Properties["DBConnection"];
 //Below are the values i want to put into the database 
 String dybde = Dybde.Text;
 String bredde = Bredde.Text;
 String plads = PladsNummer.Text;

String StrSQL = 
    "INSERT INTO Bådpladser (Plads_nummer,Bredde,Dybde) VALUES (´´"+ plads
        + "´,´" 
        + bredde
        + "´," 
        + dybde+");";

  OleDbCommand InsertCommand = new OleDbCommand(StrSQL, conn);

   InsertCommand.ExecuteNonQuery();
    }

然后我得到了错误 未处理OleDBException没有给出一个或多个参数的值

我已经进入并将数据库中的所有字段都更改为文本 我检查了他们正确的字段名称。 我初始化程序时会出现ldb文件。 但是一旦按下按钮我就会收到错误。

有什么想法吗?

诗 我已经加入了

  using System.Data;
   using System.Data.OleDb;

3 个答案:

答案 0 :(得分:2)

您的StrSQL看起来有点怀疑。你可以在执行之前显示该字符串的值吗?我猜撇号和/或引号有点混乱。

String StrSQL = "INSERT INTO Bådpladser (Plads_nummer,Bredde,Dybde) VALUES (´´"+ plads +"´,´"+bredde+"´,"+dybde+");";

作为黑暗中的刺,试试这个:

string StrSQL = string.Format("INSERT INTO Bådpladser (Plads_nummer,Bredde,Dybde) VALUES ('{0}', '{1}', '{2}')", plads, bredde, dybde);

答案 1 :(得分:1)

我注意到了这一点:

String StrSQL = "INSERT INTO Bådpladser (Plads_nummer,Bredde,Dybde) VALUES (´´"+ 
                    plads +"´,´"+bredde+"´,"+dybde+");";

我看到你在plads面前有两个撇号。你可能只需要一个。如果你不得不以双撇号的形式逃脱它们,那么你可能会在每个逗号之后加倍。

答案 2 :(得分:1)

正如其他人所指出的,您对SQL注入攻击持开放态度。你应该使用参数。它可能失败的原因是你插入的字符串的内容可能包含“?”和“?”被暗示为“我在这里期待一个参数”,这就是让它窒息的原因。

尝试更改为

String StrSQL = "INSERT INTO Bådpladser (Plads_nummer, Bredde, Dybde ) VALUES ( ?, ?, ? )";
OleDbCommand InsertCommand = new OleDbCommand(StrSQL, conn )
InsertCommand.Parameters.AddWithValue( "yourFirstParm", plads );
InsertCommand.Parameters.AddWithValue( "yourSecondParm", bredde );
InsertCommand.Parameters.AddWithValue( "yourThirdParm", dybde );

那么,执行它,但注意:参数必须按照与“?”相同的顺序添加占位。

此外,您的后端可能支持命名参数而不是“?”值...如果是这样,你可能需要调整到像

这样的东西
String StrSQL = "INSERT INTO Bådpladser (Plads_nummer, Bredde, Dybde ) "
      + "VALUES ( @parmPlads, @parmBredde, @parmDybde )";
OleDbCommand InsertCommand = new OleDbCommand(StrSQL, conn )
InsertCommand.Parameters.AddWithValue( "@parmPlads", plads );
InsertCommand.Parameters.AddWithValue( "@parmBredde", bredde );
InsertCommand.Parameters.AddWithValue( "@parmDybde", dybde );