通过C#向MS Access数据库添加记录
我正在尝试将项目添加到C#中的Access数据库。我有代码似乎工作(我可以打开和关闭数据库),但按钮单击事件会产生错误。我一直在Google上搜索整个下午,但没有快乐。我的代码是:通过C#向MS Access数据库添加记录
private void button26_Click(object sender, EventArgs e)
{ //Setup tab LoadDatabase
try
{
connection.Open();
button26.ForeColor = Color.Lime;
mainDataGridView.Visible = true;
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "INSERT INTO Main('Prop', 'Value', 'Default','Type') VALUES('one', 'Kelly', 'Jill','one')";
cmd.ExecuteNonQuery();
button26.Text = "Done Insert";
connection.Close();
}
catch (Exception ex)
{
richTextBox1.Text=("Error "+ex);
button26.ForeColor = Color.Black;
connection.Close();
}
}
而我得到的错误是:
错误System.InvalidOperationException:的ExecuteNonQuery:Connection属性尚未初始化。
在System.Data.OleDb.OleDbCommand.ValidateConnection(字符串方法)
在System.Data.OleDb.OleDbCommand.ValidateConnectionAndTransaction(字符串方法)
?在System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(的CommandBehavior行为,字符串方法)
在System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
在CrewCheifSettingsBeta3.Form1.button26_Click(对象发件人,EventArgs e)如C:\ Somepath \ Form1.cs:line 49
显然连接字符串有问题,并且它也不是SQL注入证明。
Per @ Steve的评论,当你像这样实例化时,没有与命令关联的连接。您需要设置命令的Connection
属性或更好地使用connection.CreateCommand()
来创建命令,在这种情况下它将已经与连接(更清洁)相关联。
这个问题是众所周知的。一条命令需要知道用于执行命令文本的连接。但是,您的代码中存在其他问题。
连接对象(如命令)不应该是全局的,而是在它们被需要时被创建并被销毁。 using语句在这里非常有用,因为您不必显式关闭和销毁这些对象,并且在发生异常时永远不会发生资源泄漏。
其次,当您使用也是数据库中保留关键字的字段名称时,应将这些名称包含在某种转义字符中。 Access的这些字符是打开/关闭括号而不是单引号。
private void button26_Click(object sender, EventArgs e)
{
try
{
string cmdText = @"INSERT INTO Main
([Prop], [Value], [Default],[Type])
VALUES('one', 'Kelly', 'Jill','one')";
using(OleDbConnection connection = new OleDbConnection(.....))
using(OleDbCommand cmd = new OleDbCommand(cmdText, connection))
{
connection.Open();
cmd.ExecuteNonQuery();
button26.Text = "Done Insert";
button26.ForeColor = Color.Lime;
mainDataGridView.Visible = true;
}
}
catch (Exception ex)
{
richTextBox1.Text=("Error "+ex);
button26.ForeColor = Color.Black;
}
}
最后我不知道你的字段是文本类型。您将文本文本传递为文本类型,并且在将此简单代码切换为实际值时请记住使用参数。
要执行的命令需要知道应该使用哪个连接。你不设置任何连接到你的命令 – Steve
它不会编译conn.Open(); OleDbCommand cmd = new OleDbCommand(); connection.CreateCommand(); (''','凯利','吉尔','一')“;插入主要('道具','价值',默认','类型')。 cmd.ExecuteNonQuery(); button26.Text =“完成插入”; conn。关(); @Steve – Data
坚果到4空间代码评论:) – Data