我是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语句中有'语法错误'。我认为这将在我发布的第一个问题中所做的更改中得到纠正。任何帮助将非常感激。谢谢凯特
答案 0 :(得分:3)
您从连接创建myOleDbCommand
,然后继续使用查询文本设置cmd
实例,然后执行没有附加任何命令文本的myOleDbCommand
它。
您真正想要使用哪个OleDbCommand
实例?
此外,正如@thorarin所说,你应该使用命名参数(如在cmd
示例中)并且在打开应用程序进行SQL注入攻击时不连接字符串以创建命令文本。