我尝试编写代码来 Access 数据库,但在粗体字行出现 OldDbException 错误。我应该如何更改我的话,以便在运行时不会出现任何错误?
private void submitbutton_Click(object sender, EventArgs e)
{
availabilitytabControl.SelectedTab = orderlisttabPage;
OleDbConnection myAccessConn = myAccessConnection();
OleDbCommand myAccessCommand = new OleDbCommand();
DataSet myDataSet = new DataSet();
try
{
int i;
myAccessConn.Open();
String insert ="insert into Particulars (Title,FirstName,LastName,Nationality,PassportNumber,PhoneNumber) VALUES(";
for (i = 0; i < 100; i++)
{
myAccessCommand.CommandText = insert;
String title = titlecomboBox.Items[i].ToString();
String firstname = firstnametextBox.Text;
String lastname = lastnametextBox.Text;
String nationality = nationalitycomboBox.Items[i].ToString();
String passportno = passporttextBox.Text;
String phoneno = phonenotextBox.Text;
myAccessCommand = new OleDbCommand(insert,myAccessConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
**myAccessCommand.ExecuteNonQuery();**
}
}
catch (Exception ex)
{
Console.WriteLine("Error: Failed to retrieve the required data from the DataBase.\n{0}", ex.Message);
return;
}
finally
{
myAccessConn.Close();
}
}
最佳答案
据我所知,您从不在查询的 VALUES(..)
部分添加您的值。
我的建议是;
- 在
VALUES
部分定义参数 - 在您的 for 循环中使用
myAccessCommand.Parameters.Add
添加您的值。 - 执行您的查询。
Clear()
在您想为下一个循环插入值之前清除您的参数。- 您的
OleDbDataAdapter
部分是不必要的,因为您试图将 INSERT 语句放入其中。
您应该始终使用 parameterized queries .这种字符串连接对于 SQL Injection 是开放的攻击。还可以使用 using
语句来处理您的数据库连接和命令。
using(var myAccessConn = myAccessConnection());
using(var myAccessCommand = myAccessConn.CreateCommand())
{
myAccessCommand.CommandText = @"insert into Particulars (Title,FirstName,LastName,Nationality,PassportNumber,PhoneNumber)
VALUES(?, ?, ?, ?, ?, ?)";
for (i = 0; i < 100; i++)
{
myAccessCommand.Parameters.Clear();
myAccessCommand.Parameters.AddWithValue("?", titlecomboBox.Items[i].ToString());
myAccessCommand.Parameters.AddWithValue("?", firstnametextBox.Text);
myAccessCommand.Parameters.AddWithValue("?", lastnametextBox.Text);
myAccessCommand.Parameters.AddWithValue("?", nationalitycomboBox.Items[i].ToString());
myAccessCommand.Parameters.AddWithValue("?", passporttextBox.Text);
myAccessCommand.Parameters.AddWithValue("?", phonenotextBox.Text);
myAccessConn.Open();
myAccessCommand.ExecuteNonQuery();
}
}
我以 AddWithValue
方法为例,但您没有。 This method may generate unexpected results sometimes .使用 Add 方法重载来指定您的参数类型及其大小。
关于c# - Access c# 数据库 OleDbException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31700461/