【发布时间】:2017-06-23 20:15:36
【问题描述】:
我从互联网上复制了一些代码并对其进行了修改,我有点理解它在做什么,但我无法让它正确地将记录插入数据库。如果我输入“变量的名称”,那么除了在值字段中输入的字面意思外,我似乎什么也得不到,那么这就是我从另一端得到的。一旦我让它工作,它就完成了。
我得到的错误是数据库已打开/或/插入执行命令行号上的变量有问题。
private void button9_Click(object sender, EventArgs e)
{
try
{
string ConnString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\temp\\names.accdb;Persist Security Info=False");
using (OleDbConnection Conn = new OleDbConnection(ConnString))
{
Conn.Close();//severl times connection has been open
Conn.Open();
DataSet ds = new DataSet();
ds.ReadXml(@"c:\\temp\\my123.xml");
OleDbCommand cmd = new OleDbCommand();
OleDbCommand cmd1 = new OleDbCommand();
DataTable dtCSV = new DataTable();
dtCSV = ds.Tables[0];
cmd.Connection = Conn;
cmd.CommandType = CommandType.Text;
cmd1.Connection = Conn;
cmd1.CommandType = CommandType.Text;
Conn.Open();
for (int row = 0; row <= dtCSV.Rows.Count - 1; row++)
{
for (int col = 1; col <= dtCSV.Columns.Count - 1; col++)
{
cmd.CommandText= ("INSERT INTO tab1 ( field1, field2) VALUES (dtCSV.Rows ,dtCSV.Columns)");
cmd.ExecuteNonQuery();
}
}
Conn.Close();
}
}
catch (Exception ex)
{
richTextBox1.Text = richTextBox1.Text + "\n Error " + ex + "\n"; ;
}
}
错误 System.InvalidOperationException:连接不正确 关闭。连接的当前状态是打开的。在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnection(DbConnection 外部连接,DbConnectionFactory 连接工厂, TaskCompletionSource`1 重试,DbConnectionOptions userOptions) 在 System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection 外部连接,DbConnectionFactory 连接工厂)在 System.Data.OleDb.OleDbConnection.Open() 在 WindowsFormsApp5.Form1.button9_Click(Object sender, EventArgs e)
【问题讨论】:
-
当您在 Connection 周围使用 using 语句时,该连接实例会在您退出 using 块时自动关闭。您不需要在第二个按钮单击中关闭任何内容
-
@Steve 我无法理解数据库仍然处于打开状态,即使现在重新启动后@C Perkins 你能帮忙
-
你的意思是数据库还在打开?您在 using 块内创建一个连接。在您调用 Open 之前,该连接不会打开。所以没有 conn.Close 作为 using 块内的第一行,你也不需要 conn.Close 在最后,因为 using 块在到达结束大括号时关闭并释放连接。
-
您打开连接两次,其余的,您的插入语句看起来有点“有趣”,我不确定您期望该语句的输出是什么,所以当您摆脱当前错误下一个将在 cmd.ExecuteNonQuery() 期间出现。另外,
<= value - 1==< value不要让它变得过于复杂 -
... 而且这里的任何地方都没有使用 cmd1