robertofantasy Ответов: 1

Как запустить программу на базе windows form SQL server express на клиентском ПК


привет ребята я так сильно застрял
я создал форму windows с sql express с помощью visual studio 2017 .
приложение хорошо работает на моем собственном ПК , но когда я опубликовал его и установил на другой компьютер, я получаю ошибку a network related error 52.
считайте, что я установил sql express на ПК clinet.
эта ссылка на мой проект

Hamkar_Vendors - скачать - 4shared[^]

это мой код

using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Hamkar_Vendors
    {
        public partial class MainForm : Form
        {
            //static string path = Path.GetFullPath(Environment.CurrentDirectory);
            //static string databaseName = "Hamkar_Vendor.mdf";
            string con_string = @"Data Source=.\SQLEXPRESS2014;Initial Catalog=hamkar_Vendor1;Integrated Security=True";
    
            SqlDataAdapter dataAdapter;
            DataTable dataTable;
            public MainForm()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                vendorGrp.Hide();
                Getdata("select * from vendor");
                
    
    
            }
    
            private void Getdata(string selectedString)
            {
                try { 
                dataAdapter = new SqlDataAdapter(selectedString,con_string );
                dataTable = new DataTable();
                dataTable.Locale = System.Globalization.CultureInfo.InvariantCulture;
                dataAdapter.Fill(dataTable);
                bindingSource1.DataSource = dataTable;
                    }
                catch(Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
    
            private void ثبتاطلاعاتToolStripMenuItem_Click(object sender, EventArgs e)
            {
                vendorGrp.Show();
            }
    
            private void خروجToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            private void submitBtn_Click(object sender, EventArgs e)
            {
                SqlCommand command;
                string insert = @"insert into vendor(Address , Company_Name , Country , Email , Fax , Industry , Phone , Resume , ResumeWithUs , TypeOfItems , TypeOfServices , WebSite) 
                  values (@Address , @Company_Name , @Country , @Email , @Fax , @Industry , @Phone , @Resume , @ResumeWithUs , @TypeOfItems , @TypeOfServices , @WebSite) ";
    
                using (SqlConnection con = new SqlConnection(con_string))
                {
                    try
                    { 
                    con.Open();
    
                    command = new SqlCommand(insert, con);
                    command.Parameters.AddWithValue(@"Address", AddressTxt.Text);
                    command.Parameters.AddWithValue(@"Company_Name", CompanyTxt.Text);
                    command.Parameters.AddWithValue(@"Country", CompanyTxt.Text);
                    command.Parameters.AddWithValue(@"Email", EmailTxt.Text);
                    command.Parameters.AddWithValue(@"Fax", FaxTxt.Text);
                    command.Parameters.AddWithValue(@"Industry", IndustryTxt.Text);
                    command.Parameters.AddWithValue(@"Phone", TelephoneTxt.Text);
                    command.Parameters.AddWithValue(@"Resume",Resumetxt.Text );
                    command.Parameters.AddWithValue(@"ResumeWithUs", ResumeWustxt.Text);
                    command.Parameters.AddWithValue(@"TypeOfItems", ItemsTxt.Text);
                    command.Parameters.AddWithValue(@"TypeOfServices", servicetxt.Text);
                    command.Parameters.AddWithValue(@"WebSite", WebSiteTxt.Text);
                    
                    command.ExecuteNonQuery();
                    }
                    
                    catch(Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
    
                    Getdata("select * from vendor");
                    dataGridView1.Update();
                }
    
    
            }
    
            private void vendorGrp_Enter(object sender, EventArgs e)
            {
                dataGridView1.DataSource = bindingSource1;
            }
    
            private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
            {
    
            }
    
            
    
            private void toolStripMenuItem1_Click(object sender, EventArgs e)
            {
               
            }
    
            private void جستجویاطلاعاتToolStripMenuItem1_Click(object sender, EventArgs e)
            {
                
            }
    
            private void DeleteBtn_Click(object sender, EventArgs e)
            {
                
    
                DataGridViewRow row = dataGridView1.CurrentCell.OwningRow;
                string value = row.Cells["id"].Value.ToString();
                string cname = row.Cells["Company_Name"].Value.ToString();
                string address = row.Cells["Address"].Value.ToString();
                DialogResult dialogresualt = MessageBox.Show("آیا از حذف رکورد مطمئن هستید","پیغام", MessageBoxButtons.YesNo,MessageBoxIcon.Question);
                string DeleteStatment = "Delete from vendor where id = '" + value + "'";
                if(dialogresualt == DialogResult.Yes)
                {
                    using (SqlConnection con = new SqlConnection(con_string))
                    {
                        try
                        { 
                        con.Open();
                        SqlCommand com = new SqlCommand(DeleteStatment, con);
                        com.ExecuteNonQuery();
                            Getdata("select * from vendor");
                            dataGridView1.Update();
                              
                        }
    
                        catch(Exception ed)
                        {
                            MessageBox.Show(ed.Message);
                        }
                    }
                }
            }
    
            private void SearchBtn_Click(object sender, EventArgs e)
            {
                //WindowState = FormWindowState.Maximized;
                //vendorGrp.Width = this.Width;
                //dataGridView1.Width = this.Width -200;
    
                switch(searchcombo.SelectedItem.ToString())
                {
                    case "نام شرکت":
                        Getdata("select * from vendor where lower(Company_Name) like '%" + searchtxt.Text.ToLower() + "%'");
                        break;
                    case "تلفن":
                        Getdata("select * from vendor where lower(Phone) like '%" + searchtxt.Text.ToLower() + "%'");
                        break;
                    case "ایمیل":
                        Getdata("select * from vendor where lower(Email) like '%" + searchtxt.Text.ToLower() + "%'");
                        break;
                    case "فکس":
                        Getdata("select * from vendor where lower(Fax) like '%" + searchtxt.Text.ToLower() + "%'");
                        break;
                    case "وب سایت":
                        Getdata("select * from vendor where lower(WebSite) like '%" + searchtxt.Text.ToLower() + "%'");
                        break;
                    case "زمینه فعالیت":
                        Getdata("select * from vendor where lower(TypeOfService) like '%" + searchtxt.Text.ToLower() + "%'");
                        break;
                    case "صنعت":
                        Getdata("select * from vendor where lower(Industry) like '%" + searchtxt.Text.ToLower() + "%'");
                        break;
                    case "محصولات":
                        Getdata("select * from vendor where lower(TypeOfItems) like '%" + searchtxt.Text.ToLower() + "%'");
                        break;
                }
                
                
            }
        }
    }


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

я перепробовал почти все
например включение всех служб sql server express на клиентском ПК

RickZeeland

Вы можете установить SQL Server Management Studio и посмотреть, что такое подключение к серверу, щелкнув по серверу в дереве, а также выполнить тестовый запрос ...

1 Ответов

Рейтинг:
1

Patrice T

string con_string = @"Data Source=.\SQLEXPRESS2014;Initial Catalog=hamkar_Vendor1;Integrated Security=True";

Этот путь '.\SQLEXPRESS2014' относится к локальному хранилищу, вам нужно изменить его на целевой сервер.
Getdata("select * from vendor where lower(Company_Name) like '%" + searchtxt.Text.ToLower() + "%'");

Почему вы делаете это так, как вы думаете об использовании параметров?

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


robertofantasy

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

Patrice T

Если база данных локальна для вашего компьютера, она будет локальной для вашего клиентского компьютера.
Поэтому вам нужно дать им пустую базу данных по тому же пути, и вы должны убедиться, что у них есть SQL-сервер на своем компьютере.

robertofantasy

ладно. таким образом, моя строка подключения верна (@"Data Source=.\SQLEXPRESS2014;Initial Catalog=hamkar_Vendor1;Integrated Security=True";), и я устанавливаю sql server express на свой целевой компьютер, но когда я запускаю программу, я получаю ошибку
это связано с сетью ... ошибка 52

robertofantasy

в чем же проблема