抛出异常:未为命令对象设置C#命令文本

时间:2013-04-10 12:14:07

标签: c# runtime-error

我是C#的新手,只研究了几个星期。我正在编写一个带有Windows窗体的应用程序和后面的Access数据库。我希望将用户插入的详细信息添加到访问数据库。我已经浏览了其他论坛(包括在stackoverflow上)来实现这一点,但是我一直在运行时抛出一个错误,指出'没有为命令对象设置命令文本'(我突出显示了它出现在下面的行)我不理解,也无法摆脱。任何帮助将非常感激。谢谢K

private void btnOkay_Click(object sender, EventArgs e)
        {
            string connectionString = 
                "provider=Microsoft.ACE.Oledb.12.0;" +
                "data source=C:\\Users\\Documents\\StudentRegistrationDatabase.accdb";

        OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);
        OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();

        string strSql = @"INSERT INTO StudentDetails ([Forename],[Surname],[CourseName],[DOB],)" + 

            "VALUES('"+txtFirstName.Text +"','" +txtLastName.Text +"','" +txtCourseName.Text +"','"+ txtDOB.Text +"')";


        myOleDbConnection.Open();
        OleDbCommand cmd = new OleDbCommand(strSql, myOleDbConnection);
        cmd.Parameters.AddWithValue("@Forename", txtFirstName);
        cmd.Parameters.AddWithValue("@Surname", txtLastName);
        cmd.Parameters.AddWithValue("@CourseName", txtCourseName);
        cmd.Parameters.AddWithValue("@DOB", txtDOB);

        **myOleDbCommand.ExecuteNonQuery();**   }

编辑: 谢谢大家的回复。当我第一次开始编写这篇文章时,我使用了以下几行代码:

'   {
            string connectionString = 
                "provider=Microsoft.ACE.Oledb.12.0;" +
                "data source=C:\\Users\\Botterill\\Documents\\StudentRegistrationDatabase.accdb";

            OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);
            OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();
myOleDbConnection.Open();
            myOleDbCommand.CommandText = "INSERT INTO StudentDetails ([Forename],[Surname],[CourseName],[DOB],)" +

             "VALUES('" + txtFirstName.Text + "','" + txtLastName.Text + "','" + txtCourseName.Text + "','" + txtDOB.Text + "')";'
**myOleDbCommand.ExecuteNonQuery();**

但是,在粗体的行上我得到一个运行时错误,说INSERT INTO语句中有'语法错误'。我认为这将在我发布的第一个问题中所做的更改中得到纠正。任何帮助将非常感激。谢谢凯特

1 个答案:

答案 0 :(得分:3)

您从连接创建myOleDbCommand,然后继续使用查询文本设置cmd实例,然后执行没有附加任何命令文本的myOleDbCommand它。

您真正想要使用哪个OleDbCommand实例?

此外,正如@thorarin所说,你应该使用命名参数(如在cmd示例中)并且在打开应用程序进行SQL注入攻击时不连接字符串以创建命令文本。