Üks võimalus kontrolida, mida e-maili server sinu IP-st arvab on teha telnet käsk
"telnet mail.neti.ee 25" ja vaadata, mis vastuseks tuleb
Lõppkasutajale võib teha ekraani peale nupu, kliki seda ja vaata mida kostab
byte[] bytes = new byte[2048];
// Connect the socket to the remote endpoint. Catch any errors.
try
{
IPHostEntry ipHostInfo = Dns.GetHostEntry(this.LiteralEpostiServer.Text.Trim());
IPAddress ipAddress = ipHostInfo.AddressList[0];
Socket sende = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
sende.Connect(ipAddress, Convert.ToInt32(this.LiteralPort.Text.Trim()));
this.CustomValidator2.ErrorMessage = String.Format("Socket connected to {0}", sende.RemoteEndPoint.ToString());
this.CustomValidator2.IsValid = false;
// Encode the data string into a byte array.
byte[] msg = Encoding.ASCII.GetBytes("This is a test<EOF>");
// Send the data through the socket.
int bytesSent = sende.Send(msg);
// Receive the response from the remote device.
int bytesRec = sende.Receive(bytes);
this.CustomValidator3.ErrorMessage = String.Format("Echoed test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));
this.CustomValidator3.IsValid = false;
// Release the socket.
sende.Shutdown(SocketShutdown.Both);
sende.Close();
}
catch (ArgumentNullException ane)
{
this.CustomValidator1.ErrorMessage = "ArgumentNullException: " + ane.ToString();
this.CustomValidator1.IsValid = false;
}
catch (SocketException se)
{
//Console.WriteLine("SocketException : {0}", se.ToString());
this.CustomValidator1.ErrorMessage = "SocketException: " + se.ToString();
this.CustomValidator1.IsValid = false;
}
catch (SystemException ex)
{
this.CustomValidator1.ErrorMessage = ex.Message;
this.CustomValidator1.IsValid = false;
}
Kui vaja lugeda SQL DBMail serveri profiilist andmed, siis selleks järgmine salvestatud protseduur, mis kasutab lõpuks msdb.dbo.sysmail_help_account_sp protseduuri
ALTER PROCEDURE [dbo].[E_POSTI_SERVER_PROFIILIST]
WITH EXECUTE AS 'DBO'
AS
BEGIN
SET NOCOUNT ON
DECLARE @mail_profiil VARCHAR(100), @accountID INT
SET @mail_profiil = ( SELECT MAX(string) FROM DBO.DB_DEFAULT_PARAMS_S('MAIL_SERVER_PROFILE') WHERE erro=0 )
DECLARE @profiil TABLE (profile_id int, profile_name sysname, account_id int, account_name sysname, sequence_number int)
INSERT INTO @profiil EXEC msdb.dbo.sysmail_help_profileaccount_sp @profile_name=@mail_profiil
SET @accountID=(SELECT TOP 1 account_id FROM @profiil)
--SELECT * FROM @profiil
EXEC msdb.dbo.sysmail_help_account_sp @account_id = @accountID
END
teisipäev, 6. november 2018
kolmapäev, 13. juuni 2018
Database Maili viga The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'
Andmebaasis on protseduur, mis kutsub välja msdb.dbo.sp_send_dbmail protseduuri e-posti saatmiseks.
Kõik on nagu õieti, tehtud on kontod ja profiild ning andmebaasi loginid on lisatud msdb andmebaasi DataBaseMailUser rolli
aga e-post saatmisel annab vea The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'
Lahendus on see, et andmebaas tuleb seada TRUSTWORTHY režiimi, ehk
ALTER DATABASE andmebaasi_nimi SET TRUSTWORTHY ON
Saadetud e-postide olekut saab kontrollida päringuga
select * from msdb.dbo.sysmail_allitems
Kui on kasuatusel protseduurides EXECUTE AS konstruktsioon siis võib vaja minna muuta ka andmebaasi omanikku, näiteks
EXEC sp_changedbowner 'sa'
ALTER AUTHORIZATION ON DATABASE::[andmebaas] TO [sa]
Kõik on nagu õieti, tehtud on kontod ja profiild ning andmebaasi loginid on lisatud msdb andmebaasi DataBaseMailUser rolli
aga e-post saatmisel annab vea The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'
Lahendus on see, et andmebaas tuleb seada TRUSTWORTHY režiimi, ehk
ALTER DATABASE andmebaasi_nimi SET TRUSTWORTHY ON
Saadetud e-postide olekut saab kontrollida päringuga
select * from msdb.dbo.sysmail_allitems
Kui on kasuatusel protseduurides EXECUTE AS konstruktsioon siis võib vaja minna muuta ka andmebaasi omanikku, näiteks
EXEC sp_changedbowner 'sa'
ALTER AUTHORIZATION ON DATABASE::[andmebaas] TO [sa]
pühapäev, 8. aprill 2018
Andmeseti hoidmine peale päringut
Mõnikord siis baasi päring kestab kaua ja midagi pole teha, päring käib sekundeid ja kui soov pärast kasutada DataGridi tulpade sorteerimist siis pole aega oodata, teist korda baasist päringut teha ei ole mõtekas.
Lahendab olukorra nii, et päringustsaadud andmeseti paneb kas Sessioni või ViewState-e ja järgmistel operatsioonidel, näiteks tulpade sorteerimine kasutab salvestatud andmeseti tulemusi.
private DataTable dt
{
set { this.ViewState["dt"] = value; }
get { return (DataTable)this.ViewState["dt"]; }
}
Andmete lugemine DataSeti SqlDataReader-ist
SqlDataReader red = komm.ExecuteReader();
this.dt = new DataTable();
this.dt.Load(red);
this.GridViewVolad.DataSource = this.dt;
this.GridViewVolad.DataBind();
SqlDataSource-st, peale parameetritele väärtuste andmist
DataSourceSelectArguments args = new DataSourceSelectArguments();
DataView view = (DataView)SqlDataSourceYyrnikud.Select(args);
this.dt = view.ToTable();
this.GridView1.DataSource = this.dt;
this.GridView1.DataBind();
GridView sorteerimiseks on vajalikud meeles pidada sorteerimisjärjestus ja sortimisavaldus
private string SortExpression
{
set { this.ViewState["SortExpression"] = value; }
get
{
if (this.ViewState["SortExpression"] == null)
{
this.ViewState["SortExpression"] = "ACCOUNT_ID"; //vaikimisi järjestus
}
return this.ViewState["SortExpression"].ToString();
}
}
private string SortDirection
{
set { this.ViewState["SortDirection"] = value; }
get
{
if (this.ViewState["SortDirection"] == null)
{
this.ViewState["SortDirection"] = "";
}
return this.ViewState["SortDirection"].ToString();
}
}
protected string GetSortingDirection()
{
if (this.SortDirection == "")
{
this.SortDirection = "DESC";
}
else if (this.SortDirection == "ASC")
{
this.SortDirection = "DESC";
}
else
this.SortDirection = "ASC";
return this.SortDirection;
}
GridView-le aga tuleb lisada Sorting meetod
protected void GridViewVolad_Sorting(object sender, GridViewSortEventArgs e)
{
DataView view = this.dt.DefaultView;
view.Sort = String.Format("{0} {1}", e.SortExpression, GetSortingDirection());
this.SortExpression = e.SortExpression;
this.GridViewVolad.DataSource = dt;
this.GridViewVolad.DataBind();
}
Kui nüüd GridView tulpasid sorteerida võetakse andmed this.dt DataTable-st ja baasist küsima ei minda.
Tellimine:
Postitused (Atom)