我正在构建一个读取文本文件的C#应用程序,将读取的数据写入访问97 DB,然后读取数据库并写入文件。我的OLEDB连接字符串似乎有些问题。以下是我的代码,任何人都有任何想法,为什么我得到这个例外?
数据库确实存在,我只在执行查询之前打开连接,然后再次关闭它。
string fileName = "JobLogReport.mdb";
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + fileName + ";";
OleDbConnection cnn = new OleDbConnection(connectionString);
string[] fileNames = openFileDialog1.FileNames;
int lineSkips = 2;
int fileCount = 1;
for (int i = 0; i < fileNames.Length; i++)
{
if (i == 0) { tbProgress.Text += "Reading Job Log File Number:" + fileCount + "\r\n"; }
if (i == 1) { tbProgress.Text += "Reading Job Log File Number:" + (fileCount + 1) + "\r\n"; }
tbProgress.Text += "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \r\n";
tbProgress.Text += "Populating Database \r\n";
tbProgress.Text += "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \r\n";
fileReader = new StreamReader(fileNames[i].ToString());
while (!fileReader.EndOfStream)
{
String file = fileReader.ReadLine();
if (file.StartsWith("IC.PXPSG"))
{
OleDbCommand command = new OleDbCommand();
char[] delimiters = new char[] { ' ' };
string[] line = file.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
command.CommandText = "INSERT INTO DocsReceived (Filename, Documents) VALUES (?,?)";
command.Parameters.AddWithValue("@filename", line[0]);
command.Parameters.AddWithValue("@documents", Int32.Parse(line[1], NumberStyles.Any, CultureInfo.InvariantCulture));
command.Connection = cnn;
cnn.Open();
command.ExecuteNonQuery();
cnn.Close();
看着连接对象,我注意到两件事。
服务器版本说:'cnn.ServerVersion'引发了'System.InvalidOperationException'类型的异常
cnn.Open()和cnn.OpenAsync()也不会改变连接状态。
答案 0 :(得分:0)
尝试使用控制面板设置DSN&gt;管理工具&gt;设置数据源(ODBC)&gt;系统DSN&gt;添加。
将数据源名称作为MYDSN,然后单击“选择”并浏览到Access DB。
查看快照。
之后尝试代码如下:
string strDSN = "DSN=MYDSN";
string cmdText = "Insert into AccessTable (ColumnA,ColumnB) Values (?,?)";
using (OdbcConnection cn = new OdbcConnection(strDSN))
{
using (OdbcCommand cmd = new OdbcCommand(cmdText, cn))
{
cn.Open();
foreach (DataRow r in dt.Rows)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@p1", r["ColumnA"].ToString());
cmd.Parameters.AddWithValue("@p2", r["ColumnB"].ToString());
cmd.ExecuteNonQuery();
}
}
}
答案 1 :(得分:0)
因此,经过更多调查后,我确定连接字符串中的oledb驱动程序仅支持32位应用程序。我使用的是64位计算机,因此应用程序属性会自动使其成为64位应用程序。
我执行了以下步骤来解决此问题: