在C#中访问2007数据库连接

时间:2014-12-05 08:27:17

标签: c# ms-access-2007

当我调试程序时(插入到语句错误被折磨)并且点亮了vcom.executenonquery();. 我该如何解决这个错误。

STRING VSQL = STRING.FORMAT("INSERT INTO STUDENT VALUES ((0),'(1)','(2)',(3)", INT.PARSE(TEXTBOX1.TEXT), TEXTBOX2.TEXT, TEXTBOX3.TEXT, INT.PARSE(TEXTBOX4.TEXT));
VCOM.EXECUTENONQUERY();
MESSAGEBOX.SHOW("DATA INSERTED");
VCOM.DISPOSE();

1 个答案:

答案 0 :(得分:2)

,我会尝试完全回答您的问题,因为您的代码中存在许多错误。

首先,C#是区分大小写的语言。因此,stringSTRING不一样。 EXECUTENONQUERYExecuteNonQuery也是如此。

让我们逐行分析你的代码;

你的第一行应该是;

string VSQL = string.Format("INSERT INTO STUDENT VALUES ('{0}','{1}','{2}',{3}",
                             int.Parse(TEXTBOX1.Text),
                             TEXTBOX2.Text,
                             TEXTBOX3.Text,
                             int.Parse(TEXTBOX4.Text));

而不是那样,您可以随时使用parameterized queries

例如;

string VSQL = "INSERT INTO STUDENT VALUES (?, ?, ?, ?)";
OleDbCommand cmd = new OleDbCommand(VSQL);
cmd.Parameters.Add("@p1").Value = int.Parse(TEXTBOX1.Text);
cmd.Parameters.Add("@p2").Value = TEXTBOX2.Text;
cmd.Parameters.Add("@p3").Value = TEXTBOX3.Text;
cmd.Parameters.Add("@p4").Value = int.Parse(TEXTBOX4.Text);

您可以/应该始终使用using statement,而不是手动调用.Dispose()方法。它将自动处理您的数据库连接和对象。

我假设你使用OleDbCommand,你的完整代码应该是(如果解析操作和文本框名称是正确的);

using(OleDbConnection con = new OleDbConnection(conString))
using(OleDbCommand VCOM = con.CreateCommand())
{
    string VSQL = "INSERT INTO STUDENT VALUES (?, ?, ?, ?)";
    VCOM.CommandText = VSQL;
    VCOM.Parameters.Add("@p1").Value = int.Parse(TEXTBOX1.Text);
    VCOM.Parameters.Add("@p2").Value = TEXTBOX2.Text;
    VCOM.Parameters.Add("@p3").Value = TEXTBOX3.Text;
    VCOM.Parameters.Add("@p4").Value = int.Parse(TEXTBOX4.Text);
    con.Open();
    VCOM.ExecuteNonQuery();
    MessageBox.Show("DATA INSERTED");   
}