- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在这个类中从数据库中选择两个值并将其与用户提供的文本框值进行比较。下面是我的课。
public void Userlogin(TextBox username, TextBox pwd)
{
int _failedAttempt = 0;
OpenConnection();
command = new OracleCommand();
command.CommandText = "SELECT username, user_pwd FROM dinein_system_users WHERE username:usrname AND user_pwd:pwd";
command.Connection = dbconnect;
command.BindByName = true;
try
{
command.Parameters.Add("usrname", username.Text);
command.Parameters.Add("pwd", pwd.Text);
}
catch (NullReferenceException NRE)
{
MessageBox.Show("Please contact your developer about this error. Thank you " + NRE);
}
_reader = command.ExecuteReader();
if (_reader.Read() != true)
{
_failedAttempt = _failedAttempt + 1;
while (_failedAttempt < 3)
{
MessageBox.Show("Incorrect Username or Password. Please try again " + "Attempts: " + _failedAttempt);
username.ResetText();
pwd.ResetText();
}
}
else
{
MessageBox.Show("Welcome");
}
}
我的连接字符串
this._connectionString = "Data Source=xe;Max Pool Size=50;Min Pool Size=1;Connection Lifetime=120;Enlist=true;User Id=hr;Password=hr";
所以当程序执行时我得到这个错误
An unhandled exception of type 'Oracle.DataAccess.Client.OracleException' occurred in Oracle.DataAccess.dll
附加信息:外部组件抛出异常。在过去的一个小时里,我一直在处理这个问题,如有任何帮助,我们将不胜感激。
更新
打开连接方式
public void OpenConnection()
{
try
{
if (dbconnect == null)
{
dbconnect = new OracleConnection(this._connectionString);
dbconnect.Open();
return;
}
switch (dbconnect.State)
{
case ConnectionState.Closed:
case ConnectionState.Broken:
dbconnect.Close();
dbconnect.Dispose();
dbconnect = new OracleConnection(this._connectionString);
dbconnect.Open();
return;
}
}
catch (OracleException oracleException)
{
MessageBox.Show("Database connectionString is null. Contact your developer! " + oracleException);
}
}
异常堆栈跟踪
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
at Oracle.DataAccess.Client.OracleCommand.ExecuteReader()
at DINEIN.OracleDB_Connection.Userlogin(TextBox username, TextBox pwd) in f:\My Documents\Projects\DINEIN\DINEIN\OracleDB_Connection.cs:line 92
at DINEIN.Login.btn_login_Click(Object sender, EventArgs e) in f:\My Documents\Projects\DINEIN\DINEIN\Login.cs:line 31
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.PerformClick()
at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
at System.Windows.Forms.Control.ProcessDialogKey(Keys keyData)
at System.Windows.Forms.Control.PreProcessMessage(Message& msg)
at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)
at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FPreTranslateMessage(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at DINEIN.Program.Main() in f:\My Documents\Projects\DINEIN\DINEIN\Program.cs:line 19
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
最佳答案
与其使用单独的 OpenConnection()
方法,不如考虑使用 using()
语句进行编码。它将确保您与其他数据库相关对象的连接始终被释放。
例如:
int _failedAttempt = 0;
public void Userlogin(TextBox username, TextBox pwd)
{
try
{
using (var connection = new OracleConnection(_connectionString))
{
connection.Open();
using (var command = new OracleCommand())
{
command.CommandText = "SELECT username, user_pwd FROM dinein_system_users WHERE username= :usrname AND user_pwd= :pwd";
command.Connection = connection;
command.BindByName = true;
command.Parameters.Add("usrname", username.Text);
command.Parameters.Add("pwd", pwd.Text);
using (var reader = command.ExecuteReader())
{
if (reader.Read() != true)
{
_failedAttempt += 1;
if (_failedAttempt < 3)
{
MessageBox.Show("Incorrect Username or Password. " +
"Please try again. " +
$"Attempts: {_failedAttempt}");
username.ResetText();
pwd.ResetText();
}
else
{
// 3 failed attempts
}
}
else
{
_failedAttempt = 0;
MessageBox.Show("Welcome");
}
}
}
}
}
catch(OracleException ex)
{
MessageBox.Show("Error: {ex}");
}
}
关于c# - Oracle.DataAccess.Client.OracleException C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41997598/
我有一个在 .Net 4.0 中创建的 Windows 服务,除其他外,它需要对 Oracle 数据库做两件事。一种是运行 SELECT 查询以查看是否存在具有用户给定(通过电话 UI)ID 的记录,
我正在评估 dapper,但我已经遇到了一些问题。 我正在尝试这样做 using (IDbConnection connection = GetConnection()) { connecti
我开发了一个简单的 C#、.net 4.0 网站,我想将其部署到 IIS 测试服务器上。我正在使用 Oracle.DataAccess 程序集连接到 Oracle 数据库,并且我已经添加了那个 DLL
我在这个类中从数据库中选择两个值并将其与用户提供的文本框值进行比较。下面是我的课。 public void Userlogin(TextBox username, TextBox pwd)
OracleException 没有公共(public)构造函数,也没有任何获取新实例的方法。我尝试了我的 XmlSerializerHelper 类,但它需要一个公共(public)无参数构造函数。
我试图编写这段非常简单的代码来在没有任何变量的情况下找到问题,但我做不到。如果我在 sqldeveloper 中复制相同的查询,它就可以工作。ServerVersion 仍然正确显示在消息框中。 函数
这个问题看起来像是其他问题的克隆,但我找不到这个问题的正确答案。这是我的场景:我有一个由需要写入 oracle 数据库的 webservices 调用的 C# 软件。在我的测试服务器上没有问题,它就像
我正在将产品从 System.Data.OracleClient 转换为 Oracle.DataAccess.Client,遇到一个问题这是一些代码片段: try { //some db co
在我的测试中,我需要测试抛出 OracleException 时会发生什么(由于存储过程失败)。我正在尝试将 Rhino Mocks 设置为 Expect.Call(....).Throw(new O
我编写了一个 C# 控制台程序来尝试从 Oracle 查询一些数据,这是一个非常简单的查询,但我不知道为什么它在运行时总是告诉我“缺少表达式”,请参见下面的代码 using System; using
我有一个 .Net 服务,可以根据每个请求连接到 Oracle 数据库。一开始它工作正常,但经过一些请求后我开始得到: Oracle.DataAccess.Client.OracleException
我有我的站点将使用的服务的测试环境和生产环境。在我的测试环境中,我在服务器上安装了 ODP.net。到目前为止,使用 Oracle 的服务似乎运行得非常顺利。我似乎根本没有在该服务器上运行 Oracl
我是一名优秀的程序员,十分优秀!