gpt4 book ai didi

c# - Access c# 数据库 OleDbException

转载 作者:搜寻专家 更新时间:2023-10-30 23:01:44 25 4
gpt4 key购买 nike

我尝试编写代码来 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com