C#+sql=Сеть

netuser

Well-known member
30.06.2007
53
0
#1
У меня прога. работает с базой sql. При локальной работе нет проблем все в порядке. Но что нужно сделать чтобы работала и через сеть.
Попробовал несколько вариантов, установил на один комп sql server и попытался с другого компа запустив компьютер поработать, не получилось. Что нужно сделать чтобы получилось.
 

netuser

Well-known member
30.06.2007
53
0
#3
Это пример из MSDN2005
"myConnectionString = "Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI;"
Я же в место localhost пишу имя компьютера на котором установлен sql server, например попробовал hs, \\hs, и \\"ip adress"
не помогло.
 
P

Pasha

#5
Для: netuser
На sql server-е должен быть включен протол named pipes или tcp. И у пользователя, под которым запущено приложение, должны быть соответствующие права (из-за использования Integrated Security=SSPI).
 

netuser

Well-known member
30.06.2007
53
0
#6
"named pipes" и "tcp/ip" есть. и пользователь "sa"
но не получается
 
P

Pasha

#7
Для: netuser
Integrated Security=SSPI - это windows authentication. Используется учетная запись, под которой запущено приложение, а не пользователь sa. И логин для нее должен быть заранее добавлен в sql server (по умолчанию добавлены только администраторы).
Для использования sa надо прописать в строке соединения "...Integrated Security=false;uid=sa;pwd=password;..."
 
S

sdriver

#8
Попробуй после ip -- указать имя сервиса. Еx: 192.168.1.10\SQLEXPRESS
 

netuser

Well-known member
30.06.2007
53
0
#9
Прога заработала. Все оказалось просто.
Строка соеднения:
workstation id=(local)WNetSDK;packet size=4096;user id=sa;data source="имя машины где сервер стоит";persist security info=false;initial catalog=Data_Base;password=пароль;

(local)WNetSDK - авто определение имя компа где запущена прога
 
A

AndreyAGU

#10
Стоп изивни за глупый вопрос но можно узнать полный код и на каком языке эти пишеться ну то есть я имею ввиду что если писать на с# то я должне написать
string stroka = " парметры"
Sqlconnection aaa= new SqlConnection(stroka);
aaa.open()


aaa.Close()


или надо не так пписать?
 

netuser

Well-known member
30.06.2007
53
0
#11
Вот полный код:
myConStr="workstation id=(local)WNetSDK; packet size=4096; user id="+MainWindow.UserName+";data source="+MainWindow.dataServer+";persist security info=false;initial catalog=Data_Base;password="+ MainWindow.password;
InsertComannd="INSERT INTO Real_Client(Client_Type, Register_Date, Client_Code, Card_number, Company_Name, Property_Type, Client_Name, Occupation, Contacts, E_Mail, P_Client_Type, Segment, Need_Bye_Change, Car_Type, Inform_Source, Add_Inform)"+
"values (" + "'" +b+ "'," + "'" +c+ "'," + "'"+d+ "'," + "'"+s+"'," + "'"+f+"',"+"'"+g+"',"+"'"+h+"',"+"'"+q+"',"+"'"+w+"',"+"'"+r+"',"+"'"+t+"',"+"'"+y+"',"+"'"+u+"',"+"'"+i+"',"+"'"+o+"',"+"'"+p+"'"+")";
SqlConnection myConnect=new SqlConnection(myConStr);
SqlCommand myCommand=new SqlCommand(InsertComannd);

try
{
myConnect.Open();
myCommand.Connection=myConnect;
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
MessageBox.Show("Данные добавлены", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

}
catch (SqlException)
{
MessageBox.Show("Ошибка при вводе данных", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
myCommand.Connection.Close();
}
myConnect.Close();
 

netuser

Well-known member
30.06.2007
53
0
#15
Лично мне не понравилось создание команды, обработка исключительных ситуаций и закрые соединения.

Да, и еще имена переменных : a, b, c, d, ... :)
Переменные да, но это лищь черновой вариант. Как минимум, что такое красивое и понятное оформление- это знают многие.

Вот что такое "обработка исключительных ситуаций" я не совсем понял.

Что касается создания команды, делал так как мне было удобно исходя из самой программы. Знаете универсальный вариант подходящий везде и всегда дайте и мен не него поглазеть.

А закрываю всегда так. Проблемы еще не возникали.
 
M
#16
Ну я бы написал так:

Код:
SqlConnection myConnect=new SqlConnection(myConStr);
SqlCommand myCommand=new SqlCommand(InsertComannd, myConnect);

try
{
myConnect.Open();
myCommand.ExecuteNonQuery();
MessageBox.Show("Данные добавлены", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
catch (SqlException)
{
MessageBox.Show("Ошибка при вводе данных", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
myConnect.Close();
}
А если не Sql ошибка, а какая-нибудь системная? (В жизни всякое случается :) ).

В SqlCommand есть отличный проперти - Parameters. А писать код качественно надо заставлять себя всегда, в том числе и черновой вариант, чтобы это было на уровне инстинкта. Тоже самое и с коментариями к коду. Особенно порочная практика писания грязного кода у людей с гос контор (вроде и человек работает долго, а по прежнему button1, button2, grid1, a, b, c, d, непонятные цифры фиг пойми что означающие ... и т.д.), на комерческих как-то заставляют писать нормально.

Далее - "Ошибка при вводе данных" - это должно проверяться еще до того, как вызвана команда. Да и сообщение совсем не информативно. Параметров передали 20 штук, а что неправильно, фиг знает :)
 

netuser

Well-known member
30.06.2007
53
0
#17
А писать код качественно надо заставлять себя всегда, в том числе и черновой вариант, чтобы это было на уровне инстинкта. Тоже самое и с коментариями к коду. Особенно порочная практика писания грязного кода у людей с гос контор (вроде и человек работает долго, а по прежнему button1, button2, grid1, a, b, c, d, непонятные цифры фиг пойми что означающие ... и т.д.), на комерческих как-то заставляют писать нормально.

С эти я согласен.

это должно проверяться еще до того, как вызвана команда.

Это я не совсем понял.
 
M
#19
Далее - "Ошибка при вводе данных" - это должно проверяться еще до того, как вызвана команда
Это значит, что либо поменять сообщение, либо это верное сообщение и корректность ввода данных проверяется выполнением команды, что не есть хорошо.

Пример, юзер ввел в поле "asdf", где ожидалось целое, я так понял, что дело дойдет до вызова SqlCommand и после этого юзер уже узнает, что где-то, что-то он ввёл не правильно.
 

netuser

Well-known member
30.06.2007
53
0
#20
Это значит, что либо поменять сообщение, либо это верное сообщение и корректность ввода данных проверяется выполнением команды, что не есть хорошо.

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