Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
SheFillkO
8 / 8 / 5
Регистрация: 07.06.2014
Сообщений: 51
1

OleDbConnection не имею понятия что писать для соединения с мой базой

07.06.2014, 15:53. Просмотров 2403. Ответов 17
Метки нет (Все метки)

Всем привет !

Столкнулся с такой проблемой:
написал программку которая выводит таблицу из БД и в процессе можно изменять некоторые данные, в качестве БД использовал SQL Server Express, так же пользовался System.Data.SQLClient;

Но потом я захотел попробовать сделать тоже самое, только с использованием System.Data.OleDb;
собственно менять там не много было, но натолкнулся на проблему:

что писать в строке ?
C#
1
OleDbConnection olconn = new OleDbConnection("ТУТ");
когда я использовал System.Data.SQLClient, там всё получилось таким вариантом:
C#
1
2
3
4
5
 string connectionString = @"Data source =fill-pc\sqlexpress;
                                      Initial Catalog = test_db;
                                        Integrated Security = SSPI";
 
            OleDbConnection olconn = new OleDbConnection(connectionString);
посмотрел примеры, пробовал писать разное, ну и ошибки выскакивают каждый раз по-разному и не понятные...

посмотрите пожалуйста что не так, вот собственно сам код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
 
namespace WNDF_test_DB
{
    public partial class Form1 : Form
    {
        DataSet _dataSet;
        IDataAdapter _adapter;
        IDbConnection _olconn;
       
        public Form1()
        {
            InitializeComponent();
            button2.Enabled = false;
            CreateDataSet();
            dataGridView1.DataSource = _dataSet.Tables["Books"];
            dataGridView1.CellEndEdit += new DataGridViewCellEventHandler(OnCellEdit);
            button2.Click += new EventHandler(button2_Click);
        }
 
        static string GetConnectionString()
        {
            return @"Data source = localhost; Initial Catalog =test_db; user=fill; password=password;";
        }
 
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            _dataSet.Dispose();
            _olconn.Dispose();
        }
 
        private void CreateDataSet()
        {
//            string connectionString = @"Data source =fill-pc\sqlexpress;
//                                        Initial Catalog = test_db;
//                                        Integrated Security = SSPI";
 
            OleDbConnection olconn = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0;Data source =FILL-PC\\SQLEXPRESS;Initial Catalog=test_db;Integrated Security=True;");
            OleDbCommand selectCmd = new OleDbCommand("SELECT * FROM Books", olconn);
            OleDbCommand updatecmd = new OleDbCommand("UPDATE BOOKS SET Title=@Title, PublishYear=@PublishYear WHERE BookID = @BookID", olconn);
 
            updatecmd.Parameters.Add("@BookID", OleDbType.Integer, 4, "BookID");
            updatecmd.Parameters.Add("@Title", OleDbType.VarChar, 255, "Title");
            updatecmd.Parameters.Add("@PublishYear", OleDbType.Integer, 4, "PublishYear");
 
            OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.TableMappings.Add("Table", "Books");
            adapter.SelectCommand = selectCmd;
            adapter.UpdateCommand = updatecmd;
            _olconn = olconn;
            _adapter = adapter;
            _dataSet = new DataSet("Books");
            _adapter.Fill(_dataSet);
        }
        private void OnCellEdit(object sender, DataGridViewCellEventArgs e)
        {
            button2.Enabled = true;
        } 
        private void button2_Click(object sender, EventArgs e)
        {
            _adapter.Update(_dataSet);
            button2.Enabled = false;
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2014, 15:53
Ответы с готовыми решениями:

MFC, понятия не имею как писать эту прогу, на с или с++
написать программу, генерирующую на экране разноцветные смайлики, расположенные случайным образом....

понятия не имею.выручайте
однажды (походу после выхода в интернет) мой компьютер стал вести себя неадекватно. Тоесть...

Не имею понятия как решать задачу (классы)
Створити клас вибірка Sample розмірності N. Передбачити функції для виконання наступних операцій:...

Не имею понятия как программу вообще написать
Задан массив Y(k) целых чисел. Если он упорядочен, оставить его без изменения. Если массив не...

Генератор числа без повтора. Не имею понятия в чем дело
Здравствуйте, задача такова. В функции вызвать случайное число, но чтобы онон не повторялось. Я...

17
insite2012
Модератор
Эксперт .NET
4878 / 3831 / 1096
Регистрация: 12.10.2013
Сообщений: 11,100
Записей в блоге: 2
07.06.2014, 16:32 2
SheFillkO, посмотрите мой ответ в этой теме:
Программа по физике! Дипломный проект!
1
SheFillkO
8 / 8 / 5
Регистрация: 07.06.2014
Сообщений: 51
07.06.2014, 20:35  [ТС] 3
скопировал полностью проект из вашего ответа, подставил свои названия, выскакивает ошибка:

OleDbConnection не имею понятия что писать для соединения с мой базой


у меня единственное отличие от пути которое вы прописали - это то что у меня тип файла не mdb, а dbo. скину ещё раз код, может что не так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
using System.IO;
using System.Data.OleDb;
 
namespace ole_db_pr_test
{
    public partial class Form1 : Form
    {
        private string path;
        private OleDbConnection myConnection;
        private OleDbDataAdapter myAdapter;
        private DataSet myDs;
        public Form1()
        {
            InitializeComponent();
            this.Load += delegate { Form1_Load(); };
        }
 
        private void Form1_Load()
        {
            path = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "test_db.dbo");
            if (!File.Exists(path))
                throw new FileNotFoundException("Файл базы не найден!");
            else
            {
                myConnection = new OleDbConnection();
                myAdapter = new OleDbDataAdapter();
                myDs = new DataSet();
 
                myConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path;
                myConnection.Open();
 
                OleDbCommand selectCmd = new OleDbCommand("Select * Books", myConnection);
                myAdapter.SelectCommand = selectCmd;
 
                myAdapter.Fill(myDs);
 
                dataGridView1.DataSource = myDs.Tables[0];
            }
        }
    }
}
0
insite2012
Модератор
Эксперт .NET
4878 / 3831 / 1096
Регистрация: 12.10.2013
Сообщений: 11,100
Записей в блоге: 2
07.06.2014, 20:38 4
SheFillkO, в каком месте ошибка? Что в ошибке сказано?

Добавлено через 1 минуту
Цитата Сообщение от SheFillkO Посмотреть сообщение
"Select * Books"
Books, как я понял, имя таблицы в базе? Замените на Select * From Books.
1
SheFillkO
8 / 8 / 5
Регистрация: 07.06.2014
Сообщений: 51
07.06.2014, 20:38  [ТС] 5
я сделал скрин, в прошлом ответе есть ссылка на него

ну вот ещё копирнул текст

Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.IO.FileNotFoundException: Файл базы не найден!
в ole_db_pr_test.Form1.Form1_Load() в c:\users\fill\documents\visual studio 2010\Projects\ole_db_pr_test\ole_db_pr_test\Form1.cs:строка 31
в ole_db_pr_test.Form1.<.ctor>b__0(Object , EventArgs ) в c:\users\fill\documents\visual studio 2010\Projects\ole_db_pr_test\ole_db_pr_test\Form1.cs:строка 24
в System.Windows.Forms.Form.OnLoad(EventArgs e)
в System.Windows.Forms.Form.OnCreateControl()
в System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
в System.Windows.Forms.Control.CreateControl()
в System.Windows.Forms.Control.WmShowWindow(Message& m)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.ContainerControl.WndProc(Message& m)
в System.Windows.Forms.Form.WmShowWindow(Message& m)
в System.Windows.Forms.Form.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
0
insite2012
Модератор
Эксперт .NET
4878 / 3831 / 1096
Регистрация: 12.10.2013
Сообщений: 11,100
Записей в блоге: 2
07.06.2014, 20:39 6
SheFillkO, файл где находится? Положите его в ту же папку (Debug или Release), где исполняемый файл проекта. Вам же ошибка ясно об этом говорит!
0
SheFillkO
8 / 8 / 5
Регистрация: 07.06.2014
Сообщений: 51
07.06.2014, 21:26  [ТС] 7
Обыскал всё что можно было, файла с расширением .dbo просто нету
тем не менее нашел файл с расширением .mdf, копирнул этот файл куда надо, теперь ошибка поменялась:

************* Текст исключения **************
System.Data.OleDb.OleDbException (0x80004005): Нераспознаваемый формат базы данных: 'C:\Users\FILL\documents\visual studio 2010\Projects\ole_db_pr_test\ole_db_pr_test\bin\Debug\test_db.mdf'.

не менять же расширение насильно
0
insite2012
Модератор
Эксперт .NET
4878 / 3831 / 1096
Регистрация: 12.10.2013
Сообщений: 11,100
Записей в блоге: 2
07.06.2014, 21:45 8
SheFillkO, а через Access создать файл базы никак?
Учтите, что в моем примере файл для Access 2003, у вас может быть другой. Соответственно строку подключения надо будет изменить.
0
SheFillkO
8 / 8 / 5
Регистрация: 07.06.2014
Сообщений: 51
07.06.2014, 21:47  [ТС] 9
через access уже пробовал, надо разобраться теперь с этим геморроем ...
0
insite2012
Модератор
Эксперт .NET
4878 / 3831 / 1096
Регистрация: 12.10.2013
Сообщений: 11,100
Записей в блоге: 2
07.06.2014, 22:05 10
Цитата Сообщение от SheFillkO Посмотреть сообщение
надо разобраться теперь с этим геморроем ...
С каким именно? Какой тип БД вы используете?
0
SheFillkO
8 / 8 / 5
Регистрация: 07.06.2014
Сообщений: 51
07.06.2014, 22:19  [ТС] 11
Microsoft SQL Server 2008
0
m@cChe
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 224
Записей в блоге: 1
Завершенные тесты: 1
07.06.2014, 22:28 12
ODBC:
C#
1
2
3
4
5
_connection = new System.Data.Odbc.OdbcConnection();
            _connection.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};" +
                "SourceType=DBF;Exclusive=No;" +
                "Collate=Machine;NULL=NO;DELETED=NO;" +
                "BACKGROUNDFETCH=NO;";
OleDB:
C#
1
2
3
4
_connection = new System.Data.OleDb.OleDbConnection();
            _connection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
                                           + putFileName + ";" +
                                           "Extended Properties=dBASE IV;";
1
SheFillkO
8 / 8 / 5
Регистрация: 07.06.2014
Сообщений: 51
07.06.2014, 22:35  [ТС] 13
мне под OleDb
что собственно писать в putFileName?
просто название самого файла ? и писать ли его с расширением или без ? а то у меня файл с расширением .mdf, писало ошибку что такой формат не подходит.
не могли бы написать полный пример, буду весьма благодарен
0
IamRain
1410 / 1256 / 396
Регистрация: 02.08.2011
Сообщений: 3,727
07.06.2014, 22:54 14
SheFillkO, тут не смотрели: Ищи меня тут ?

Добавлено через 11 минут
А вообще там же написано, что не стоит. Лучше использовать .net framework data provider (SqlClient). Как я сам понимаю oledb - довольно старая, хоть и универсальная технология доступа к данным. Сам только для msaccess и использовал когда-то.
1
SheFillkO
8 / 8 / 5
Регистрация: 07.06.2014
Сообщений: 51
07.06.2014, 23:13  [ТС] 15
OleDb не старая, просто она не признанная как надёжная, на самом деле компания Microsoft пыталась внедрить эту технологию достаточно долго, но из-за множества ошибок и багов технологию не признавали и пользовались по-настоящему старой технологией ODBC (признанная и надёжная, проверенная временем, но с меньшим функционалом), и вот в этом году компания Microsoft, при анонсировании MS SQL server 2014, отказалась сопровождать технологию OleDb на неизвестное время ...
0
m@cChe
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 224
Записей в блоге: 1
Завершенные тесты: 1
08.06.2014, 00:35 16
putFileName - путь к бд AS файлу.
0
SheFillkO
8 / 8 / 5
Регистрация: 07.06.2014
Сообщений: 51
08.06.2014, 00:59  [ТС] 17
Народ !) я нашёл ответ, это простое решение которое спасет вам много времени

вот ссылка:
http://www.community.terrasoft.ru/blogs/6980

честно говоря когда читал этот метод, думал что фиг что с этого получиться)))
0
m@cChe
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 224
Записей в блоге: 1
Завершенные тесты: 1
08.06.2014, 01:08 18
Честно говоря, для обращения к mssql server по моему вполне достаточно System.Data.SqlClient. Оledb и odbc использую только для работы с dbf. .
0
08.06.2014, 01:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 01:08

Дартс в haskell? Какой ужас.понятия не имею, как и с чем это есть
А как делать это???=-O Дартс поделен на 20 секций. За каждый бросок начисляется такое...

Мне надо сделать приватное свойство номер и как то вызвать, понятия не имею. Можете объяснить?
&lt;?php class Auto { public $marka=''; public function auto_marka ($marka) { ...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru