![](/img/trans.png)
[英]OleDbException Unhandled: No value given for one or more parameters
[英]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.