得到这个错误“;ORA-06413:连接未打开”;

本文关键字:连接 ORA-06413 错误 | 更新日期: 2023-09-27 18:19:32

我使用的是visual studio 2010和Oracle 10g。操作系统:Windows 7家庭基本版。如果我在visualstudio2005中使用以下代码,我将得到正确的输出。但在Visual Studio 2010中,我得到了一个错误

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OracleClient;
using System.Windows.Forms;
public partial class Default2 : System.Web.UI.Page
{
    OracleConnection con = new OracleConnection("uid=scott;pwd=tiger;data source=");
    OracleCommand cmd = new OracleCommand();
    OracleDataReader dr;
    string name1, pass1;
    protected void Page_Load(object sender, EventArgs e)
    {
        con.Open();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        cmd = new OracleCommand("Select* from tb1 where name='" + TextBox1.Text + "'and pass='"+TextBox2.Text + "'", con);
        dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            name1 = dr[0].ToString();
            pass1 = dr[1].ToString();
        }
        if (name1 == TextBox1.Text && pass1 == TextBox2.Text)
        {
            Response.Redirect("Home.aspx");
        }
        else
        {
            MessageBox.Show("Incorrect user name or password");
        }
    }
}

得到这个错误“;ORA-06413:连接未打开”;

这可能是定义连接的tnsnames.ora的问题。

您可以使用以下连接字符串省略tnsnames.ora

OracleConnection con = new OracleConnection("Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = !!!!!!!!YOURDBNAME!!!!!!!!!)(SERVER = DEDICATED))); User Id=Scott;Password=tiger;");

从页面加载中删除打开的连接,并在执行之前添加以下内容:

if(con.State == ConnectionState.Closed)
{
        con.Open();
}
dr = cmd.ExecuteReader();

请在硬盘上搜索名为tnsnames.ora的文件,并在此处发布该文件的内容。

还有一些提示:

  • 每次加载页面时,con对象都会被实例化并打开
  • 单击按钮将强制执行页面加载和页面加载事件。请参阅"通用页面生命周期阶段"
  • 将代码移动到按钮clíck Handler
  • MessageBox总是显示在服务器上,来自客户端的用户永远不会看到此消息。当您开发服务器和客户端时,它们位于同一台物理机器上
  • default2.aspx中添加一个div。

并呼叫:

error.InnerText="Incorrect user name or password";

检查名称和密码两次,一次在SQL语句中,另一次在代码中。这更好:

dr.Read(); 
    If (dr.HasRows())
        Response.Redirect("Home.aspx");
    else
        error.InnerText="Incorrect user name or password";

您尚未将连接分配给命令,在执行命令之前需要以下内容:

cmd.Connection = con;

VS 2010:我想分享一个经验,当我通过WCF服务池化oracel连接并在开发服务器上托管WCF时。得到错误"ORA-06413:连接未打开"。找不到web serach的实际帮助。最后,我在生产服务器上部署了WCF的编译版本。当我使用我的应用程序中的WCF服务时,它对我有效…

希望这能帮助到面临同样问题的人。。。