vs2019 c#webservice msaccess

问题描述 投票:0回答:1

在vs2019(C#)中,我正在使用非常简单的代码

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=D:\\Data\\000_TEST.accdb";
conn.Open();
conn.Close();

并且工作正常:我的意思是-运行此代码“ 000_TEST.accdb”时,此文件生成“ 000_TEST.laccdb”,并在60-80秒后自动删除;我可以重复很多次,一切正常。

但是当我尝试在Web服务和调用方法中使用此代码时,它再次正常工作,还会生成“ 000_TEST.laccdb”文件,并在60-80秒后删除,但是存在1个问题:在显示“ 000_TEST.laccdb”文件之前,可以调用此方法,而且我可以多次调用此方法,但是在60-80秒之后-当“ 000_TEST.laccdb”文件被删除并且不可见时,当我尝试调用此方法时,出现错误:

System.Runtime.InteropServices.SEHException: External component has thrown an exception.
   at System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString constr, SessionWrapper& sessionWrapper)
   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()
   at WSTest.WebService1.Incr(String conStr, Int32 a) in D:\My Documents\VS Projects\WSTest\WSTest\WebService1.asmx.cs:line 41

注意:第41行是-“ conn.Open();”

c# web-services asmx
1个回答
0
投票

这是一种以下方法如果用户名和密码正确,则返回用户标识;第一次正常运行,以后在laccdb文件可见时运行良好,但是如果我等到这个laccdb文件不可见(这大约是60-80秒),并调用此方法,我会报错(我在描述在第一条消息上)

但是此方法代码并不重要仅打开和关闭连接而没有任何检索数据时,我也遇到相同的错误;也不要依赖于访问文件,如果我打开的访问文件为空(里面没有表),则会出现同样的错误。

因此从Web服务打开和关闭连接时出现问题。来自C#Windows窗体的相同代码工作正常。

 [WebMethod]
        public int GetToken(string UserName, string Password)
        {
            string queryString = "SELECT ID FROM CORE_Staffs WHERE PID='" + UserName + "' and Password='" + Password + "'";
            DataSet ds = new DataSet();
            OleDbConnection conn = new OleDbConnection(connectionString);
            OleDbCommand cmd = new OleDbCommand(queryString, conn);
            conn.Open();
            OleDbDataAdapter Adapter = new OleDbDataAdapter(cmd);
            Adapter.Fill(ds);
            if (ds.Tables[0].Rows.Count == 0)
            {
                conn.Close();
                return 0;
            }
            else
            {
                string S;
                S = ds.Tables[0].Rows[0][0].ToString();
                conn.Close();
                return Int32.Parse(S);
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.