[Źródło: https://docs.microsoft.com/en-us/dotnet/]
Program:
Na samym początku należy zdeklarować biblioteki jakie będą potrzebne do nawiązania komunikacji z bazą danych SQL.
- using System.Data.Sql;
- using System.Data.SqlClient;
- using System.Data.SqlTypes;
Nawiązania połączenia wygląda następująco:
- public class sqlCon
- {
- protected static SqlConnection sqlCon;
- public static bool connectWithSqlDb()
- {
- sql.sqlConectionInfo.readConData();
- string conString = sql.sqlConectionInfo.prepareConString();
- sqlCon= new SqlConnection(conString);
- try
- {
- sqlCon.Open();
- sqlCon.Close();
- return true;
- }
- catch
- {
- return false;
- }
- }
- }
Klasa powyżej odpowiada za nawiązanie i przetestowanie połączeni z bazą danych. Na samym początku pobiera informacje o połączeniu, po czym przygotowywany jest string z połączeniem. W przypadku poprawnego otwarcia bazy zwracana jest wartość True, gdy wystąpił błąd zwracana jest wartość False.
- public class sqlConectionInfo : checkIfConStringData
- {
- private static string serverNameStr = "";
- private static string dataBaseNameStr = "";
- private static string conStr = "";
- private static string userName = "";
- private static string userPassword = "";
- public static string ap_serverNameStr
- {
- get { return serverNameStr; }
- private set { serverNameStr = value; }
- }
- public static string ap_dataBaseNameStr
- {
- get { return dataBaseNameStr; }
- private set { dataBaseNameStr = value; }
- }
- public static string ap_conStr
- {
- get { return conStr; }
- private set { conStr = value; }
- }
- public static string ap_userName
- {
- get { return userName; }
- private set { userName = value; }
- }
- public static string ap_userPassword
- {
- get { return userPassword; }
- private set { userPassword = value; }
- }
- public static void readConData()
- {
- ap_serverNameStr = Properties.Settings.Default.serverNameRetData;
- ap_dataBaseNameStr = Properties.Settings.Default.dataBaseNameRetData;
- ap_conStr = checkIfConStringData.checkIfConStringWriteInMemIfNotWriteDef(Properties.Settings.Default.conStringRetData);
- ap_userName = Properties.Settings.Default.userNameRetData;
- ap_userPassword = Properties.Settings.Default.userPassRetData;
- }
- public static string prepareConString()
- {
- return String.Format(ap_conStr, ap_serverNameStr, ap_dataBaseNameStr, ap_userName, ap_userPassword);
- }
- }
- public class checkIfConStringData
- {
- private const string conStrDefault = "Server={0};Database={1};user id={2};Password={3};Integrated Security=True;MultipleActiveResultSets=True";
- protected static string checkIfConStringWriteInMemIfNotWriteDef(string conString)
- {
- if (conString == "")
- {
- return conStrDefault;
- }
- return conString;
- }
- }
String z danymi o połączeniu przyjmuje takie parametry jak nazwa serwera (tutaj podaje się również port po przecinku np. nazwaserwera,port), nazwę bazy danych z którą dokonywane jest połączenie, login, hasło. Następnie jest parametr Integrated Securit, który ustawiony na true oznacza, że do uwierzytelniania wykorzystywane są dane dla konta Windows. Kolejny parametr czyli MultipleActiveResultSets dla true pozwala na używanie wielu instancji przy jednym połączeniu.
Komunikacja z bazą odbywa się poprzez zapytania SQL.
Aby odczytać wszystkie informacje w bazie można posłużyć się następującą funkcją:
- public static DataSet readWholeTable()
- {
- DataSet ds = new System.Data.DataSet();
- SqlCommand command;
- using (sqlCon)
- {
- sqlCon= new SqlConnection(sql.sqlConectionInfo.prepareConString());
- cnnCards.Open();
- command = new SqlCommand(sql.sqlComm.getAllData, sqlCon);
- SqlDataAdapter da = new SqlDataAdapter(command);
- da.Fill(ds);
- sqlCon.Close();
- da.Dispose();
- }
- return ds;
- }
Tutaj tworzony jest element klasy DataSet, który będzie przechowywał odczytane dane. Wykonywana komenda wygląda następująco:
- public const string getAllData = "SELECT * FROM name_of_table;";
W przypadku odczytu jednej komuny można posłużyć się następującą operacją:
- public static List<string> readColumn()
- {
- List<string> list = new List<string>();
- DataTable ds = new System.Data.DataTable();
- using (sqlCon)
- {
- try
- {
- sqlCon= new SqlConnection(sql.sqlGetDataConInfo.prepareConString());
- sqlCon.Open();
- }
- catch
- {
- list = null;
- sqlCon.Close();
- return list;
- }
- /* readColumn = "SELECT column_name FROM tablename;"; */
- using (SqlCommand cmd = new SqlCommand(sql.sqlComm.readColumn, sqlCon))
- {
- try
- {
- using (SqlDataReader reader = cmd.ExecuteReader())
- {
- if (reader != null)
- {
- while (reader.Read())
- {
- list.Add(reader[sql.sqlPracComm.localizationColumnName].ToString());
- }
- }
- }
- }
- catch
- {
- list = null;
- sqlCon.Close();
- return list;
- }
- }
- }
- sqlCon.Close();
- return list;
- }
Tutaj dane zostają zapisane do stworzonej listy, która po wykonaniu poprawnego odczytu zostaje zwrócona.
Dodanie nowego rekordu do bazy:
- public static bool insertIntoDB(string name, string surname, string number)
- {
- string insertData = "insert into tableName ([id], [name_first], [name_last], [numberData]) " +
- "values (@id, @name, @surname, @numberData);";
- int affectedRows = 0;
- SqlCommand command;
- Int32 id = readMaxIDInDb();
- if(id == -1)
- {
- return false;
- }
- id += 1;
- try
- {
- sqlCon = new SqlConnection(sql.sqlConectionInfo.prepareConString());
- sqlCon.Open();
- command = new SqlCommand(insertData, sqlCon);
- command.Parameters.AddWithValue("@id", id.ToString());
- command.Parameters.AddWithValue("@name", name);
- command.Parameters.AddWithValue("@surname", surname);
- command.Parameters.AddWithValue("@numberData", number);
- affectedRows = command.ExecuteNonQuery();
- sqlCon.Close();
- }
- catch
- {
- return false;
- }
- if (affectedRows > 0)
- {
- return true;
- }
- return false;
- }
Tutaj najpierw tworzony jest nowy rozkaz, następnie sprawdzany jest aktualny numer ID w bazie po czym dodawane są dane i komenda zostaje wykonana. Gdy wystąpi błąd lub liczba wykonanych operacji będzie mniejsza od 1 to zwrócona zostaje wartość false, oznaczająca błąd wykonywania komendy.
- private static Int32 readMaxIDInDb()
- {
- Int32 readedIdValue = -1;
- SqlCommand command;
- try
- {
- sqlCon = new SqlConnection(sql.sqlConectionInfo.prepareConString());
- sqlCon.Open();
- /* readMaxIdValue = "SELECT MAX(cards.id) FROM tablename;"; */
- command = new SqlCommand(sql.sqlCardsComm.readMaxIdValue, sqlCon);
- readedIdValue = Convert.ToInt32(command.ExecuteScalar());
- sqlCon.Close();
- return readedIdValue;
- }
- catch
- {
- return -1;
- }
- }
Wyszukiwanie osoby w bazie danych na podstawie imienia i nazwiska:
- public static byte searchInDBBaseOnNameAndSurname(string name, string surname)
- {
- byte readedRows = 0;
- try
- {
- sqlCon = new SqlConnection(sql.sqlConectionInfo.prepareConString());
- sqlCon.Open();
- string commandToExecute = String.Format(sql.sqlCardsComm.findPersonBaseOnNameOrSurname, name, surname);
- SqlCommand myCommand = new SqlCommand(commandToExecute, sqlCon);
- SqlDataReader myReader = myCommand.ExecuteReader();
- while (myReader.Read())
- {
- readedRows++;
- }
- sqlCon.Close();
- }
- catch
- {
- return 0;
- }
- return readedRows;
- }