none
一个非常奇怪的c# 连接access数据库的问题? RRS feed

  • 问题

  • 我再Button中添加了一个数据链接
    可是出现个这样的问题
    点击Button后,打开连接,会出现异常
    {未处理 TypeInitializationException}
    {“System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。}
    而在打开链接语句中做个断点就会正常的运行下去
    请高手指教
    string SQLString = "SELECT a,b,c,d,e,f,g FROM abc";
    
                String connectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
    
                connectionString += @"d:\db.mdb";
    
    
    
                using (OleDbConnection myConnection = new OleDbConnection(connectionString))
    
                {
    
                    using (OleDbCommand myCommand = new OleDbCommand(SQLString, myConnection))
    
                    {
    
                        myConnection.Open();///在此出现提示异常 未处理 TypeInitializationException
    
                        OleDbDataReader myReader;
    
                        myReader = myCommand.ExecuteReader();
    
    
    
                        int j = 0;
    
                        int count = 0;
    
                        while (myReader.Read())
    
                        {
    
                            for (int i = 0; i <= 6; i++)
    
                            {
    
                                numbera[j, i] = Convert.ToInt16(myReader[i]);
    
                                count += numbera[j, i];
    
                            }
    
                            numbera[j, 7] = count;
    
                            numbera[j, 8] = Convert.ToInt16(count / 7);
    
                            count = 0;
    
                            j++;
    
                            //Console.WriteLine(myReader.GetInt32(0)     +     ","+   myReader.GetString(1));       
    
                        }
    
                        myReader.Close();
    
                        myConnection.Close();
    
                    }
    
                }
    
    
    2009年9月3日 12:36

答案

  •      using (OleDbCommand myCommand = new OleDbCommand(SQLString, myConnection))

    多了这句using 造成连接对象未引用
    去掉即可
    2009年9月3日 14:08
  • 代码并没有问题,检查是否是其它原因所致。比如新建一个空的项目试试,或重新建一个 access 试试。
    知识改变命运,奋斗成就人生!
    2009年9月3日 15:25
    版主
  • 你好,OleDbComman 不需要使用using关键词,using一般用于需要显示关闭的资源,而OleDbCommand不存在这个现象。

    请参考,

    using System;
    using System.Data;
    using System.Data.OleDb;
    
    class Class1
    {
        static void Main()
        {
        }
    
        public void InsertRow(string connectionString, string insertSQL)
        {
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                // The insertSQL string contains a SQL statement that
                // inserts a new row in the source table.
                OleDbCommand command = new OleDbCommand(insertSQL);
    
                // Set the Connection to the new OleDbConnection.
                command.Connection = connection;
    
                // Open the connection and execute the insert command.
                try
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                // The connection is automatically closed when the
                // code exits the using block.
            }


    jon.valett@gmail.com
    2009年9月3日 15:28
    版主
  • 你好,就语法上说,没有错误,由于实现了Command实现了IDisposable的所以可以使用using
    我刚才测试了代码是可以运行的

    Microsoft.Jet.OleDb.4.0不知道你电脑上这个数据库引擎是否正常,运行下regsvr32 msjetoledb40.dll试试
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月4日 4:34
    版主

全部回复

  •      using (OleDbCommand myCommand = new OleDbCommand(SQLString, myConnection))

    多了这句using 造成连接对象未引用
    去掉即可
    2009年9月3日 14:08
  • 代码并没有问题,检查是否是其它原因所致。比如新建一个空的项目试试,或重新建一个 access 试试。
    知识改变命运,奋斗成就人生!
    2009年9月3日 15:25
    版主
  • 你好,OleDbComman 不需要使用using关键词,using一般用于需要显示关闭的资源,而OleDbCommand不存在这个现象。

    请参考,

    using System;
    using System.Data;
    using System.Data.OleDb;
    
    class Class1
    {
        static void Main()
        {
        }
    
        public void InsertRow(string connectionString, string insertSQL)
        {
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                // The insertSQL string contains a SQL statement that
                // inserts a new row in the source table.
                OleDbCommand command = new OleDbCommand(insertSQL);
    
                // Set the Connection to the new OleDbConnection.
                command.Connection = connection;
    
                // Open the connection and execute the insert command.
                try
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                // The connection is automatically closed when the
                // code exits the using block.
            }


    jon.valett@gmail.com
    2009年9月3日 15:28
    版主
  • 你好,就语法上说,没有错误,由于实现了Command实现了IDisposable的所以可以使用using
    我刚才测试了代码是可以运行的

    Microsoft.Jet.OleDb.4.0不知道你电脑上这个数据库引擎是否正常,运行下regsvr32 msjetoledb40.dll试试
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月4日 4:34
    版主