簡體   English   中英

沒有為一個或多個參數提供OleDBException未處理的NO值

[英]OleDBException was unhandled NO value given for one or more parameters

我正在嘗試從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是未處理的為一個或多個參數提供的NO值

我進入數據庫並將數據庫中的所有字段更改為文本,然后檢查了字段名稱是否正確。 當我初始化程序時,將出現ldb文件。 但是當我按下按鈕時,我得到了錯誤。

有任何想法嗎?

附言:我已將

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

您的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);

我注意到了這一點:

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

我看到您在小鍵盤前面有兩個撇號。 您可能只需要一個。 如果您必須將它們作為雙撇號轉義,那么您可能會在每個逗號前加倍。

正如其他人指出的那樣,您很容易受到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 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM