0

我正在尝试从 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 is unhandled NO value given for one or more parameters

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

有任何想法吗?

Ps 我已经包括了

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

3 回答 3

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);
于 2012-05-15T19:05:25.300 回答
1

我注意到了这一点:

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

我看到你在 plads 前面有两个撇号。你可能只需要一个。如果您必须将它们作为双撇号转义,那么您可能会在每个逗号之后加倍。

于 2012-05-15T19:07:03.627 回答
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 );
于 2012-05-15T19:30:18.297 回答