我正在尝试从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;
答案 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 );