ASP.Net连接到Access

时间:2017-03-02 19:39:03

标签: asp.net ms-access-2010

这是我的代码,但我无法将数据插入MS Access数据库

protected void Submit_Click(object sender, EventArgs e)
    {
        string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" 
            + @"Data Source=E:\Parhai\Semester 06\Web\Assignments\i140097_Assignment_02\i140097_a02\i140097_a02\Database\Survey.mdb; Persist Security Info=False";
        con = new OleDbConnection(connectionString);
        con.Open();
        using (con)
        {
            cmd = new OleDbCommand("INSERT INTO [Person] (Gender, Age, Occupation, Income) VALUES (" + gender.Text + ",'" + age.Text + ",'" + occup.Text + ",'" + income.Text + ")");
            cmd.Parameters.AddWithValue("@Gender", gender.Text.ToString());
            cmd.Parameters.AddWithValue("@Age", int.Parse(age.Text.ToString()));
            cmd.Parameters.AddWithValue("@Occupation", occup.Text.ToString());
            cmd.Parameters.AddWithValue("@Income", int.Parse(income.Text.ToString()));
            lbl_show.Text = "Added!!!";
        }            
    }

1 个答案:

答案 0 :(得分:1)

您正在定义参数,但您的命令文本没有参数占位符 像往常一样,当连接字符串时,很容易因为某些语法错误而崩溃。在您的数据库中, Gender 似乎是一个字符串字段,因此您需要围绕该值引用。相反,年龄似乎是一个整数,你不需要引用,等等......

所以第一步是抛弃字符串连接,只使用下面定义的参数。

cmd = new OleDbCommand(@"INSERT INTO [Person] 
       (Gender, Age, Occupation, Income) VALUES 
       (@Gender, @Age, @Occupation, @Income)", con);
cmd.Parameters.AddWithValue("@Gender", gender.Text);
cmd.Parameters.AddWithValue("@Age", int.Parse(age.Text));
cmd.Parameters.AddWithValue("@Occupation", occup.Text);
cmd.Parameters.AddWithValue("@Income", int.Parse(income.Text));
cmd.ExecuteNonQuery();

另一个问题是构建命令时缺少连接 命令本身无法知道它应该在哪个数据库上执行。您需要将OleDbConnection作为第二个参数传递给OleDbCommand构造函数,或者在执行命令之前设置Connection属性。

当然,命令需要在一天结束时执行.....

NB。我还删除了那些TextBoxes的Text属性之后的ToString()。文本已经是一个字符串,无需将其转换为字符串。