尝试插入数据时出现问题

杰瑞

新成员
已加入
2017年11月23日
留言内容
1
编程经验
3-5
帮助任何人,
我是C#和使用数据库的新手。我正在尝试使用Youtube的一些代码将信息插入数据库。我能够从数据库中成功选择数据,但是由于任何原因,当我尝试执行下面的插入查询(在下面加粗体和下划线)时,我的try catch块都会引发与语法错误相关的异常并引用我的插入语句:
C#:
namespace Movies
{
    public partial class Form2 : Form
    {
        private OleDbConnection connection = new OleDbConnection();
        public Form2()
        {
            
            InitializeComponent();
            connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Graham\Desktop\School.accdb;
                                          Persist Security Info=False;";
        }


        private void btn_save_Click(object sender, EventArgs e)
        {
            try
            {


               
                connection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                //command.CommandText = "insert into students(Names, Age, Gpa) values('" + txt_name.Text +"','" + txt_age.Text + "','" + txt_gpa.Text + "')";
                [U][B]command.CommandText = "INSERT INTO students (Names, Age, Gpa) VALUES ('Abeni', '20', '3.2')";[/B][/U]
                int numRows = command.ExecuteNonQuery();
                MessageBox.Show("Data Saved");
                
            }
            catch(Exception excpt)
            {
                MessageBox.Show("Error" + excpt);
            }
        }
    }
}
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
首先,我将您的代码段包装在代码格式标签中。如您所见,它使它更具可读性。每当发布代码段时,请这样做。通常,您应该使用:

[xcode]您的代码在这里[/ xcode]

因为它将执行语法突出显示。如果您想添加其他格式,例如粗体或下划线,请使用:

[code]您的代码在这里[/ code]

您可以手动输入标签,也可以使用高级编辑器上的工具栏。

至于这个问题,对我来说,立即导致语法错误的原因还不是很明显。一个常见的原因是列名是保留字或包含特殊字符(如空格)。列名中显然没有特殊字符,我也认为没有保留字符。您可以在线找到ACE SQL中的保留字列表,但也可以尝试转义所有列名,如果可以,则您知道是问题所在。通过将列名称括在方括号中来转义列名称,例如"[姓名],[年龄],[Gpa]"。还有许多其他因素可能导致语法错误,但是我在您的代码中看不到任何证据。

我确实看到的一件事是数据类型不匹配错误的可能性。我希望您已在数据库中将“名称”列定义为文本数据类型,并将“年龄”和“ Gpa”列定义为数字数据类型。在SQL代码中,单引号用于表示文本,就像C#中使用双引号一样。正如您不在C#中用双引号引起来的数字一样,在SQL中也没有用双引号引起来的数字。

看起来您已经注释掉了原始代码以测试硬编码值。根据原始代码,您需要学习如何在ADO.NET中使用参数。实际上,这消除了某些情况下语法错误的可能性,例如如果名称中包含撇号,但最重要的是,它可以防止SQL注入。如果不使用参数,恶意用户就有可能删除数据库的全部内容。我建议您单击下面我的签名中的Blog链接,并查看有关ADO.NET中的Parameters的文章。
 
最佳 底部