mihhai Ответов: 1

Как создать класс метода для oracleconnection в C#, чтобы его можно было повторно использовать для следующей выборки базы данных


Привет, я довольно новый новичок в программировании на c#, и мне нужно обратиться за помощью, так как сейчас я размыт в c#... Поэтому меня попросили создать метод для базы данных OracleConnection в приведенном ниже коде, чтобы его можно было использовать повторно, не набирая его еще раз. Настоящим я прилагаю свой код. Спасибо за помощь.


using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Oracle.DataAccess;
using Oracle.DataAccess.Client; //ODP.NET ORacle managed provider

namespace WindowsFormsApp7
{
    public partial class MyApp : Form
    {

        public MyApp()
        {
            InitializeComponent();
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string OracleServer = "Data Source=mydb;"
            + "User Id=Config;Password=config123;"; //  your username and password database server

            OracleConnection conn = new OracleConnection(OracleServer);
            conn.Open();
            string orcl = @"Select * FROM mydatabase";
            OracleCommand cmd = new OracleCommand(orcl);

            cmd.Connection = conn;
            OracleDataAdapter da = new OracleDataAdapter();
            DataTable dt = new DataTable();
            da.SelectCommand = cmd;
            da.Fill(dt);

            listBoxdB.DataSource = dt;
            listBoxdB.ValueMember = "Database_id";
            listBoxdB.DisplayMember = "Location";

            this.dataGridView1.DataSource = dt;
            this.dataGridView1.Refresh();


            conn.Close();
            conn.Dispose();
        }

        private void listBoxdB_SelectedIndexChanged(object sender, EventArgs e)
        {
            string strDbID = Convert.ToString(listBoxdB.SelectedValue);
            string strDbLocation = Convert.ToString(listBoxdB.GetItemText(listBoxdB.SelectedItem));

            string strSql = @"select Name, id from my_source
                            where id not in (select id
                            from new_database
                            where database_id = " + strDbID + ")";

            string OracleServer = "Data Source=mydb;"
                                   + "User Id=config;Password=config123;"; 

            OracleConnection conn = new OracleConnection(OracleServer);
            conn.Open();
            OracleCommand cmd = new OracleCommand(strSql);
            cmd.Connection = conn;
            OracleDataAdapter da = new OracleDataAdapter();
            DataTable dt = new DataTable();
            da.SelectCommand = cmd;


            try
            {
                da.Fill(dt);

                this.listBoxApp.DataSource = dt;
                this.listBoxApp.ValueMember = "Application_id";
                this.listBoxApp.DisplayMember = "Application_Name";

            }
            catch { }

        }


        private void listBoxApp_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}


Что я уже пробовал:

Я пытался создать класс, но c# не похож на другие программы, которые я изучал раньше, такие как c и c++...

OriginalGriff

А что вы пробовали?
Где ты застрял?
Какая помощь вам нужна?

Покажите нам класс, который вы написали до сих пор, и объясните, в чем проблема с ним.
Мы не имеем ни малейшего представления о том, как должен выглядеть ваш класс, что он должен делать или что он должен выставлять.
Если у вас есть опыт работы в C++ с классами, то часть проектирования должна быть такой же: решить, что должен делать класс, а также какие свойства и методы он предоставляет. C# в этом плане тот же - просто механика реализации немного другая.

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Richard Deeming

string strSql = @"select Name, id from my_source
                            where id not in (select id
                            from new_database
                            where database_id = " + strDbID + ")";


Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

1 Ответов

Рейтинг:
0

Wendelius

Если я правильно понял ваш вопрос, я бы не стал пытаться сохранить соединение для последующего повторного использования. Вместо этого я бы позволил пулу соединений позаботиться о кэшировании объектов подключения. Взгляните на это Особенности Oracle Data Provider для .NET[^]

Что касается самой строки подключения, то вы можете сохранить ее для быстрого доступа, например, в конфигурационном файле, в одной статической строковой переменной и т. д.

Например, взгляните на Четыре способа чтения настроек конфигурации в C#[^]