Тема: C# . Как совместить wind.Form.exe с Autocad?

Доброе время суток. У меня возик такой чайниковский вопрос,пару дней копаюсь в C#(Micr.Visual Studio) и почиркала пару плагинов,и пару формочек,а как это объединить и возможно ли,я не понимаю.
Объясняю суть задачи:

Нажать кнопочку в Autocad->Выскочило диалоговое окно выбора проекта->получила Selected Folder path в строковую переменную,которая в свою очередь будет служить ключём поиска нужной строки данных в table на SQL (тут кстати тоже есть проблема,но наверное как то решается заменой символов)->выбралась строка -> отсюда идёт запрос есть ли у него подъобъекты (которые хочу вынести в combobox).Вот из этого всего берутся необходимые значения String и обновляют значения атрибута блока,который попутно вставится в Autocade wacko2 .

Если да-возможно,то сначала хотела бы решить мелкую проблему, необходимую для поиска.У меня строка Selected Folder path преобразуется из одного "\"в "\\" -как это необходимо для SQL запроса,ну и соответственно не может найти в БД соответствующую строку,как это решить?метод replace тоже ругается на синтаксис  :oops:

using System;
using System.IO;
using System.Windows.Forms;
using System.Data.SqlClient; 
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;

namespace FoldBrDlg
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
         private void button1_Click(object sender, EventArgs e)
        {            
               DialogResult result = folderBrowserDialog1.ShowDialog();
                if (result == DialogResult.OK)
                {
                    string PrjPath = folderBrowserDialog1.SelectedPath;
                    MessageBox.Show(PrjPath);
                    SqlConnection connection = new SqlConnection("Data Source=SAPR;Initial Catalog=Olimps_Tools_Acad;Integrated Security=SSPI");

                    SqlCommand command = new SqlCommand("select PrjName from Test_data WHERE Path=" + PrjPath, connection);
                            connection.Open();
                                using (var reader = command.ExecuteReader())
                                    {
                                        while (reader.Read())
                                            textBox1.Text = reader["PrjName"].ToString();
                                    }
                            connection.Close();
                }
        }

         private void button2_Click(object sender, EventArgs e)
         {
             this.Close();
         }
    }
}

C# . Как совместить wind.Form.exe с Autocad? -скрин ошибки
C# . Как совместить wind.Form.exe с Autocad?-скрин таблицы БД

p.s.
Autocad 2013 SP1
.NET Framework 4.5.
Microsoft Visual Studio Ultimate 2013
Version 12.0.30723.00 Update 3

(изменено: Андрей, 29 октября 2014г. 14:43:04)

Re: C# . Как совместить wind.Form.exe с Autocad?

выбралась строка -> отсюда идёт запрос есть ли у него подъобъекты

С этой фразы я перестал понимать. У кого это "у него"? Что за "подобъекты"?

P.S. Рекомендую вопросы задавать здесь, а не на кадюзере.

Re: C# . Как совместить wind.Form.exe с Autocad?

Андрей пишет:

выбралась строка -> отсюда идёт запрос есть ли у него подъобъекты

С этой фразы я перестал понимать. У кого это "у него"? Что за "подобъекты"?



P.S. Рекомендую вопросы задавать здесь, а не на кадюзере.

Ну проект один, а у него есть подобъекты....как дерево...
п.с. мне наоборот посоветовали сюда обратиться...

Re: C# . Как совместить wind.Form.exe с Autocad?

п.с. мне наоборот посоветовали сюда обратиться...

Этот форум можно считать мёртвым. Более "живой" вариант я тебе уже указал выше. Ты определись, тебе "шашечки или ехать"? Если всё же "ехать", то задавай вопрос на указанном мною форуме.

Ну проект один, а у него есть подобъекты....как дерево...

Ты, случаем, не путаешь ли понятия "решения" (solution) и "проекта" (project)?

Нажать кнопочку в Autocad->Выскочило диалоговое окно выбора проекта->

Тогда может это был всё же не AutoCAD, но Visual Studio?

в table на SQL

SQL это не СУБД, но язык программирования, используемый при работе с реляционными СУБД. Из .NET с такими СУБД рекомендую работать с помощью технологии ADO.NET (не путать с ADO). Есть и др. способы, но боюсь, что они для тебя будут слишком сложными, учитывая твой текущий уровень знаний .NET.

Re: C# . Как совместить wind.Form.exe с Autocad?

WHERE Path=" + PrjPath

|
|
V

WHERE Path=\"" + PrjPath + "\""

или

WHERE Path='" + PrjPath + "'"

Re: C# . Как совместить wind.Form.exe с Autocad?

Спасибо,НО...
1вар.

new SqlCommand("select PrjName from [Test_data] WHERE Path=\""+ put+"\"", connection);
Execute Reader "select PrjName from [Test_data] WHERE Path="Z:\Projects\2014\NewProj""   
Command Text = "select PrjName from [Test_data] WHERE Path=\"Z:\\Projects\\2014\\NewProj\"",
Connection String =...

2.вар.

new SqlCommand("select PrjName from [Test_data] WHERE Path='"+ put+"'", connection);
Execute Reader "select PrjName from [Test_data] WHERE Path='Z:\Projects\2014\NewProj'"   
Command Text = "select PrjName from [Test_data] WHERE Path='Z:\\Projects\\2014\\NewProj'",
Connection String = "D

Как видите слэши в середине путей это не ликвидирует..

(изменено: Дианка, 30 октября 2014г. 15:33:14)

Re: C# . Как совместить wind.Form.exe с Autocad?

Андрей пишет:

Этот форум можно считать мёртвым. Более "живой" вариант я тебе уже указал выше. Ты определись, тебе "шашечки или ехать"? Если всё же "ехать", то задавай вопрос на указанном мною форуме.

Вот с этого и надо было начать,а не просто "иди туда".

Ты, случаем, не путаешь ли понятия "решения" (solution) и "проекта" (project)?

-проект в смысле строительный,а не программный...

Типо: Проект "реконструкция здания Завода "Ремашкино"" -а в нём объекты:котельная,Плошадка,насосная...и т.п.


в table на SQL

SQL это не СУБД, но язык программирования, используемый при работе с реляционными СУБД. Из .NET с такими СУБД рекомендую работать с помощью технологии ADO.NET (не путать с ADO). Есть и др. способы, но боюсь, что они для тебя будут слишком сложными, учитывая твой текущий уровень знаний .NET.

-тут речь была о таблице которая находится SQL-server.

п.с.
The C# Station ADO.NET Tutorial
у меня всё так и написано ...видимо Вы не вникли
спасибо и на том

(изменено: Андрей, 30 октября 2014г. 15:51:13)

Re: C# . Как совместить wind.Form.exe с Autocad?

Не изобретай кривых велосипедов. Читай книгу, обозначенную здесь в п.7.

тут речь была о таблице которая находится SQL-server.

Я догадался. Мой ответ остаётся актуальным. Отправлять на сервер непосредственно текст SQL-запроса, вместо того, чтобы вызывать параметрическую хранимую процедуру - за это нужно бить линейкой по рукам (почитай об SQL-инъекциях).

п.с.
The C# Station ADO.NET Tutorial
у меня всё так и написано ...видимо Вы не вникли
спасибо и на том

"Так" да не так... По указанной ссылке, мягко говоря - плохие примеры. Я бы даже сказал, что там примеры того, как делать не следует. Книгу я обозначил, в ней всё детально разжёвано: что, как и почему именно так, а не иначе.

Хорошая книга по программированию баз данных на SQL Server эта. Там показано в т.ч. и как создавать хранимые процедуры, которые при помощи ADO.NET можно "дёргать" из внешнего приложения.

Re: C# . Как совместить wind.Form.exe с Autocad?

Дианка пишет:



Спасибо,НО...

1вар.

new SqlCommand("select PrjName from [Test_data] WHERE Path=\""+ put+"\"", connection);

Execute Reader "select PrjName from [Test_data] WHERE Path="Z:\Projects\2014\NewProj""   

Command Text = "select PrjName from [Test_data] WHERE Path=\"Z:\\Projects\\2014\\NewProj\"",

Connection String =...



2.вар.

new SqlCommand("select PrjName from [Test_data] WHERE Path='"+ put+"'", connection);

Execute Reader "select PrjName from [Test_data] WHERE Path='Z:\Projects\2014\NewProj'"   

Command Text = "select PrjName from [Test_data] WHERE Path='Z:\\Projects\\2014\\NewProj'",

Connection String = "D



Как видите слэши в середине путей это не ликвидирует..

put.Replace("\\\\", "\\")
или
put.Replace(@"\\", @"\")

(изменено: Дианка, 30 октября 2014г. 16:17:22)

Re: C# . Как совместить wind.Form.exe с Autocad?

Андрей пишет:

Не изобретай кривых велосипедов. Читай книгу, обозначенную здесь в п.7.

Спасибо,буду читать, просто как то от меня ожидают походу за неделю "велосипед" ),а как правило на чтение времени нет,но полезно действительно будет.

Я догадался. Мой ответ остаётся актуальным. Отправлять на сервер непосредственно текст SQL-запроса, вместо того, чтобы вызывать параметрическую хранимую процедуру - за это нужно бить линейкой по рукам (почитай об SQL-инъекциях).

про такое я спрошу у человека одного,который бить не будет.)

Хорошая книга по программированию баз данных на SQL Server эта. Там показано в т.ч. и как создавать хранимые процедуры, которые при помощи ADO.NET можно "дёргать" из внешнего приложения.

-не очень поняла ,зачем мне программирование базы данных wacko2 ..я использую его как хранилище(и то думаю всё таки распрошу про аксесс ,мне кажется SQL  жирновато будет для наших нужд,да и там куча другой информации хранится,боюсь что "шаловливыми" руками подотру(или коллеги) что-нибудь..

Re: C# . Как совместить wind.Form.exe с Autocad?

Дианка пишет:

не очень поняла ,зачем мне программирование базы данных wacko2 ..я использую его как хранилище

Чтобы создать набор необходимых хранимых процедур и обращаться к ним, вместо того, чтобы отправлять непосредственно SQL запрос. Запросы бывают разные: получение информации, изменение её или удаление. Нормальный админ должен в СУБД установить запрет на входящие SQL запросы, дабы защитить БД от SQL-инъекций. Вместо этого он различным группам пользователей даёт доступ на вызов определённых хранимых процедур. Разным категориям пользователей разные права. Такой подход автоматом исключает возможность того, что

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

. Т.е. у тебя будет доступ только к нужному тебе набору таблиц посредством чётко определённых хранимых процедур (например, доступ только на чтение). Если ты хочешь грамотно работать с СУБД, то хорошо знать SQL -необходимость.

(изменено: Дианка, 31 октября 2014г. 11:04:22)

Re: C# . Как совместить wind.Form.exe с Autocad?

777 пишет:
WHERE Path='" + PrjPath + "'"

всё таки в итоге надо было с кавычками,апострофами баловаться ) ,я посчитала длину пути (put.lenght -символы) он просто отображает по два слэша.... Спасибо )

ДО-

SqlCommand command = new SqlCommand("select PrjName from Test_data WHERE Path=" + put, connection);

ПОСЛЕ

string cmd = "SELECT PrjName from Test_data WHERE Path = '" + put + "'";
 SqlCommand command = new SqlCommand(cmd , connection);

--тут просто команду ,посоветовали вынести отдельно

(изменено: Дианка, 31 октября 2014г. 11:12:51)

Re: C# . Как совместить wind.Form.exe с Autocad?

Андрей пишет:

Чтобы создать набор необходимых хранимых процедур и обращаться к ним, вместо того, чтобы отправлять непосредственно SQL запрос. Запросы бывают разные: получение информации, изменение её или удаление. Нормальный админ должен в СУБД установить запрет на входящие SQL запросы, дабы защитить БД от SQL-инъекций. Вместо этого он различным группам пользователей даёт доступ на вызов определённых хранимых процедур. Разным категориям пользователей разные права. Такой подход автоматом исключает возможность того, что

Т.е. у тебя будет доступ только к нужному тебе набору таблиц посредством чётко определённых хранимых процедур (например, доступ только на чтение). Если ты хочешь грамотно работать с СУБД, то хорошо знать SQL -необходимость.

о!ну это уже на 20 милей вперёд для меня ))) я сначала сама потестирую,а потом уже буду думать о безопасности...но в любом случае я уже вчера эту книжечку стаащила себе,Спасибо.

а Всё же такой еще нубский вопрос, что бы работать с БД в Аксессе(C#,Autocad,Access), для Юзверей что-то надо? ну там ДНС,провайдер какой-нибудь устанавливать всем.. или что еще? (учитывая то,что вроде как у 99% юзверей всё одинаково,верс автокада, и мс офиса.
просто для меня спокойней ,и проще всё таки создать базочку в mdb.... учитывая то, что касается ворд-а там проблем нет.,опять же можно прикрутить и офис к той же мдб

(изменено: Андрей, 31 октября 2014г. 11:37:30)

Re: C# . Как совместить wind.Form.exe с Autocad?

Дианка пишет:

а Всё же такой еще нубский вопрос, что бы работать с БД в Аксессе(C#,Autocad,Access), для Юзверей что-то надо? ну там ДНС,провайдер какой-нибудь устанавливать всем.. или что еще?

Нужен драйвер. Как правило, он присутствует по умолчанию. Однако помнится я сталкивался с проблемой, когда на Windows 7 x64 был установлен MS Office 2003 x86. Мой код не находил нужный драйвер. Там как раз была работа "C#,Autocad,Access". Я об одном из вариантов, показанном мною здесь (см. второе видео).

просто для меня спокойней ,и проще всё таки создать базочку в mdb....

Использование ADO.NET позволяет абстрагироваться от конкретной СУБД. Т.е. даёт возможность менять СУБД по мере необходимости: Access, SQL Server, MySQL, PostgeSQL и т.д. При этом вносить изменения в код не нужно будет. Достаточно будет в конфиг-файле подправить строку подключения.