Archyvas

Įrašo tag'ai: ‘microsoft sql server’

Howto. Execute MS SQL Stored Procedure With C#

Balandis 5th, 2010 Ernestas Kardzys 2 komentarai

At the moment I’m coding a small project for my university. I have to create a simple system on C# and Microsoft SQL Server 2005. So, I need a way (and code) to execute MS SQL Server’s Stored Procedures from my C# program. How to do that?

Suppose we have a Stored procedure:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
– =============================================
– Author: Ernestas Kardzys
– Create date: 2010.03.16
– Description: Inserts new client into Client table
– =============================================
ALTER PROCEDURE [dbo].[client_insert]
@Name nvarchar(50) = null,
@Address nvarchar(50) = null,
@PhoneNumber nvarchar(50) = null,
@SecurityAccountID int = 0
AS
BEGIN
– SET NOCOUNT ON added to prevent extra result sets from
– interfering with SELECT statements.
SET NOCOUNT ON;

— Insert statements for procedure here
INSERT INTO Client (Name, Address, PhoneNumber, SecurityAccountID) VALUES (@Name, @Address, @PhoneNumber, @SecurityAccountID);
END

Then we need a C# method:

private static SqlConnection sqlConnection = new SqlConnection(“user id=sa;” +
“password=sa;server=ERNESTAS-PC\\SQLEXPRESS;” +
“Trusted_Connection=yes;” +
“database=Investments; ” +
“connection timeout=30″);
public void Connect()
{
sqlConnection.Open();
}
///
/// Description: Executes a Stored procedure
///
/// First parameter: The name of Stored procedure
/// The second parameter: The parameters pf Stored Procedure
/// Throws: SQLException
/// Returns: DataTable with results
public static DataTable ExecuteProcedure(string query, List<KeyValuePair> parameters)
{
SqlDataAdapter dataAdapter = new SqlDataAdapter();
DataTable dataTable = new DataTable();
SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
dataAdapter.SelectCommand = sqlCommand;

if (parameters != null)
{
foreach (KeyValuePair cmd in parameters)
{
sqlCommand.Parameters.Add(new SqlParameter(cmd.Key, cmd.Value));
}
}

dataAdapter.Fill(dataTable);

return dataTable;
}

And use it:

List<KeyValuePair> dbRecord = new List<KeyValuePair>();
dbRecord.Add(new KeyValuePair(“@SecurityAccountID”, comboBoxSecurityAccount.SelectedIndex.ToString()));
dbRecord.Add(new KeyValuePair(“@Address”, textBoxAddress.Text.Trim()));
dbRecord.Add(new KeyValuePair(“@Name”, textBoxName.Text.Trim()));
dbRecord.Add(new KeyValuePair(“@PhoneNumber”, textBoxPhoneNumber.Text.Trim()));

SQLClient.ExecuteProcedure(“client_insert”, dbRecord);

Good luck!

SQL. Deadlock’ai

Darbe susidūriau su tokia problema, kad kartais SQL serveris atjungia kokį procesą prie SQL serverio.

Paskaitęs internete atradau, kad taip atsitinka dėl to, jog SQL serveris aptinka, kad yra negerovė su procesu. Tada iš (tarkim) esančių dviejų procesų atsitiktinai parinktą vieną išjungia (abort) ir kitas gali drąsiai veikti.

Įdomi situacija. Ieškojau sprendimo. Praėjau keletą tinklalapių ir radau sprendimus:

http://www.sql-server-performance.com/tips/deadlocks_p1.aspx “Reducing SQL Server Deadlocks”

http://msdn.microsoft.com/en-us/library/ms188246.aspx “Analyzing Deadlocks with SQL Server Profiler”

http://articles.techrepublic.com.com/5100-10878_11-5181472.html “Control SQL Server locking with hints”

SQL. CASE sakinys

Birželis 30th, 2008 Ernestas Kardzys Nėra komentarų

Kartais gali prireikti SQL’e susieti vieną informaciją su kita. Pvz. skaičius 1-as reiškia “A”, skaičius 2 reiškia “B”, skaičius 3 reiškia “C”. Kaip tai padaryti? Pasinaudoti CASE sakiniu:

 SELECT CASE Skaiciai WHEN 1 THEN ‘A’ WHEN 2 THEN ‘B’ ELSE ‘C’ END AS ‘Skaitinė informacija’ FROM SkaiciuLentele

Geras daiktas ;)

SQL įterpto įrašo ID gavimas

Birželis 9th, 2008 Ernestas Kardzys Vienas komentaras

Jeigu dirbate su MS SQL greičiausiai Jums reikia įterpti įrašą. Taip pat gali prireikti, kad būtų gražintas įterpto įrašo ID.

Paprastas triukas:

INSERT lentelės_vardas
( laukas1, laukas2, laukas3)
VALUES ( @laukas1, @laukas2, @laukas3)
SELECT @@IDENTITY

MSDN’as atsinaujino + šiaip MS produktai

Gegužė 27th, 2008 Ernestas Kardzys Vienas komentaras

Apsilankiau vakar MSDN tinklapiuose. Dizainas tikrai atnaujintas – įgavo tamsesnę raudoną spalvą.

Dar mačiau MS Visual Studio Express 2008. Reikės pabandymui parsipumpuoti, tik kad tai 800MB+ :/ Daugoka…

Truputį apmaudu, kad MS Vista nenori be atnaujinimų įsileisti MS Visual Studio 2005 Express :/ Tad, reikės bandyti grūsti 2008-ų Express versiją :)

Apie duomenų bazių normalines formas

Gegužė 15th, 2008 Ernestas Kardzys Nėra komentarų

Diskutavome vakar apie normalines formas (NF). Tad, jei nepamiršau, išvada tokia:

1 NF bus tada, kai yra primary key ir nėra pasikartojančių stulpelių. Žodžiu, gana paprasta. Kitaip tariant: beveik visada bus 1 NF.

2 NF bus tada, kai tenkins 1 NF taisykles + iš dalies primary key negalima gauti kurio nors vieno įrašo.

3 NF bus tada, kai tenkins 2 NF taisykles + primary key nurodys visas lentelės įrašus. Kitaip tariant: lentelėje nebus tokių įrašų, kurių negalima gauti turinti primary key.

SQL Server 2005 Books Online

Balandis 19th, 2008 Ernestas Kardzys Nėra komentarų

Nuėjau į Microsoft tinklalapius ir parsipumpavau šį daikčiuką. Tiksliau, jo rugsėjo versiją :)

Pastebėjimas: Microsoft’as tikrai moka gaminti gerą dokumentaciją. Daug naudingos ir suprantamos informacijos. Tik vienas pastebėjimas: nuėjus į MSDN tinklapius ir iš ten paleidus paiešką (beje, paieška irgi nieko – gana tiksli) bus lėčiau, negu neėjus į Google ir iš ten ieškant medžiagos MSDN’e. Įdomi ypatybė.

Bet grįžkime prie SQL serverio dokumentacijos. Daiktas tikrai geras, jei dirbate su Microsoft SQL serveriu. Dokumentacija primena man Linux’o man puslapius, tik kad ją reikia parsisiųsti – pas mane internetas silpnas ir ne nuolatinis. Tiesa, kartais galima nuėjus į KTU internetą parsisiųsti reikiamos medžiagos studijoms. Nors tuo stengiuosi nepiktnaudžiauti.

Tad apibendrinant šią žinutę: jei turite Microsoft SQL serverį, parsipumpuokite dokumentaciją. Taškas :)

http://msdn2.microsoft.com/lt-lt/sqlserver/bb895970(en-us).aspx

P.S. Manęs draugas paklausė, kuo skiriasi MS SQL Server Express ir kitos versijos (Enterprise, Standard ir pan.). Nežinojau tuo metu tiksliai, tad paieškojau internete.

http://www.microsoft.com/sql/prodinfo/features/compare-features.mspx

SQL dievams

Kovas 26th, 2008 Ernestas Kardzys 3 komentarai

Kas buvo šiandien Informatikos studijų krypties specializacijų pristatyme – (gal) supras. Apie SQL.

Kieta užklausa: SELECT * FROM šaldytuvas

:D

MS SQL Server 2005 ir C# [papildyta]

Kovas 26th, 2008 Ernestas Kardzys 2 komentarai

Mano senesnėje programoje/žinutėje http://www.ernestas.info/?p=233 vienas mano blogo lankytojas pastebėjo rimtą klaidą. Dirbdamas su MS SQL duomenų baze aš gražinu -1 kaip klaidos pranešimą. Buvo pastebėta, kad tai rimta klaida.

Tikslus pastebėjimas, tad į jį yra mano pasiteisinimai:

  1. Tai antra mano programa ant C#.
  2. Programa nerimta – skirta mokymosi tikslais.
  3. Ir aš iki išimčių apdorojimo (exception-handling) dar nepriskaičiau :D Žinojau, kad galima pagauti išimtį, o kaip ją “aukštyn” permesti – nežinojau. Tad šį tą atradau ir padariau :) Aišku, programa idealiai neveikia :)

Pasirodo, išimtį “aukštyn” permeta throw

Išimties apdorojimas atrodo maždaug taip:

catch (Exception ex) {

ex = new Exception(“Klaida”);

throw;

}

http://www.ernestas.info/projects/csharp/TestinePrograma.zip

MS SQL Server 2005 ir C#

Kovas 24th, 2008 Ernestas Kardzys 4 komentarai

Pasirašiau nesudėtingą programą, kuri veikia kaip konsolė: įvedame MS SQL užklausas, o programa gražina atsakymą – užklausos rezultatą.

Tiesa, atradau keletą klaidų, kurių kol kas dar neištaisiau. Bet tikiuosi pataisyti :)

Pavadintas šis gėris “TestinePrograma”. Kai rašiau – geresnio vardo nesugalvojau, tad tokį ir palikau :)

http://www.ernestas.info/projects/csharp/TestinePrograma.zip