【问题标题】:SQL Connection failingSQL 连接失败
【发布时间】:2014-03-02 22:05:17
【问题描述】:

我正在尝试执行以下代码(出于安全考虑,已对某些位进行了编辑)

private void ServiceMainScreen_Load(object sender, EventArgs e)
    {
        //DataTable stuff = new DataTable();
        //stuff.Select("select "WorkOrder"."WorkOrderID", "Customer"."FirstName", "Vehicles"."Model", "WorkOrder"."State" from "WorkOrder", "Customer", "Vehicles" WHERE "WorkOrder"."VIN" = "Vehicles"."VIN" AND "Vehicles"."CustomerID" = "Customer"."CustomerID" AND "WorkOrder"."State" = 'In Progress';
        try
        {
            string commands = "select \"WorkOrder\".\"WorkOrderID\", \"Customer\".\"FirstName\", \"Vehicles\".\"Model\", \"WorkOrder\".\"State\"  from \"WorkOrder\", \"Customer\", \"Vehicles\" WHERE \"WorkOrder\".\"VIN\" = \"Vehicles\".\"VIN\" AND \"Vehicles\".\"CustomerID\" = \"Customer\".\"CustomerID\" AND \"WorkOrder\".\"State\" = 'In Progress'";

            using (SqlConnection conn = new SqlConnection("Data Source=rowkir0911;Persist Security Info=True;User ID=xxxx;Password=xxxx;"))
            using (SqlCommand command = new SqlCommand(commands, conn))
            {
                command.Connection = conn;
                conn.Open();
                using (SqlDataAdapter adapter = new SqlDataAdapter())
                {
                    adapter.SelectCommand = command;
                    DataTable table = new DataTable();
                    adapter.Fill(table);
                    dgvDisplayWOs.DataSource = table;
                    dgvDisplayWOs.AutoGenerateColumns = true;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

但是,它似乎无法找到数据库。我可以访问数据库的 Get Started/Application Express 以及 SQL 命令行,但我需要该程序来生成表。我在 Visual Studio 2010 上使用带有 C# 的 Winforms。

【问题讨论】:

    标签: c# sql .net oracle datagridview


    【解决方案1】:

    在执行任何命令之前,您必须通过调用conn.Open(); 打开 SQL 连接。

    【讨论】:

    • 我添加了 conn.Open();它仍然无法正常工作。我更新了我的代码示例。
    • @user3169698,有什么例外吗?
    • 它说找不到数据库或无法访问。如果我使用 Add New DataSource 可以很好地连接到它,但我需要显示 SQL 查询的结果。
    【解决方案2】:

    您的连接字符串或查询都没有指定数据库名称。 您可以修改连接字符串

    using (SqlConnection conn = new SqlConnection("Data Source=rowkir0911;Persist Security Info=True;initial catalog=xxxx;User ID=xxxx;Password=xxxx;"))
    

    或者您可以修改查询以使用限定表名,例如 [DB].[Schema].[Table]

    【讨论】:

    【解决方案3】:

    我相信您正在尝试连接到 Oracle。但是您使用的是 System.Data.SqlClient 中的类,用于连接到 SQL Server 数据库。

    改用 ODP.Net。您可以在 Oracle.DataAccess.Client 下找到所有必要的类

    更新

    您需要添加对 Oracle.DataAccess.dll 程序集的引用。

    这是一个你可以尝试的代码 -

       using Oracle.DataAccess.Client;
       .
       .
       .
       try
        {
            string commands = "select \"WorkOrder\".\"WorkOrderID\", \"Customer\".\"FirstName\", \"Vehicles\".\"Model\", \"WorkOrder\".\"State\"  from \"WorkOrder\", \"Customer\", \"Vehicles\" WHERE \"WorkOrder\".\"VIN\" = \"Vehicles\".\"VIN\" AND \"Vehicles\".\"CustomerID\" = \"Customer\".\"CustomerID\" AND \"WorkOrder\".\"State\" = 'In Progress'";
    
            using (OracleConnection conn = new OracleConnection("Data Source=rowkir0911;Persist Security Info=True;User ID=xxxx;Password=xxxx;"))
            using (OracleCommand command = new OracleCommand(commands, conn))
            {
                command.Connection = conn;
                conn.Open();
                using (OracleDataAdapter adapter = new OracleDataAdapter())
                {
                    adapter.SelectCommand = command;
                    DataTable table = new DataTable();
                    adapter.Fill(table);
                    dgvDisplayWOs.DataSource = table;
                    dgvDisplayWOs.AutoGenerateColumns = true;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 2011-07-26
      • 1970-01-01
      • 2022-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      相关资源
      最近更新 更多