hello everyone
in the old envirement the server is using sql 2008 R2 as well as the new server.
I just made some DB changes to the assemblies and made a new signature from untrust to trust assemblies. now i getting the following error:
Msg 6522, Level 16, State 1, Procedure sp_HRimport, Line 0
A .NET Framework error occurred during execution of user-defined routine or aggregate "sp_HRimport":
System.Security.SecurityException: Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
System.Security.SecurityException:
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.PermissionSet.Demand()
at System.Data.Common.DbConnectionOptions.DemandPermission()
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at StoredProcedures.import()
.
(1 row(s) affected)
I have no clue how to solve this problem or what the problem is.
I set THRUSTWORTHY to ON and it didnt helped.
the .net code looks like that. I know it isn't the best code but it is working since years
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO;
using System.Collections.Generic;
using System.Text;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static int import()
{
int ret = 1;
SqlConnection connection = new SqlConnection("Data Source=SERVERNAME\\instanzename,PORT;Initial Catalog=AdventureWorks;Integrated Security=True");
// Öffnen der connection
connection.Open();
// Holt den Pfad aus der Tabelle system_ZZDB und convertiert es in einen String. Direkte zuweisung wird nicht zugelasen
SqlCommand command = new SqlCommand("SELECT RTRIM(sys_value) FROM system_ZZDB WHERE sys_key = 'hrPath';", connection);
String fileName = Convert.ToString(command.ExecuteScalar());
// Pfad für das PIAS File für Bixi
string new_path = "\\\\ServerForTheNewPath\\Galaxy$\\pias\\PIAS.TXT";
// Wen das File vorhanden ist
if (File.Exists(fileName))
{
// Text hinzufügen zum File
System.IO.StreamWriter file = new System.IO.StreamWriter(new_path, true, Encoding.GetEncoding(1252));
FileStream logFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader logFileReader = new StreamReader(logFileStream, System.Text.Encoding.Default);
while (!logFileReader.EndOfStream)
{
string line = logFileReader.ReadLine();
string sql = "INSERT INTO temp_person(per_nummer, per_pid, per_name, per_vname, per_geburtstag, per_sprache, per_anrede, per_buIDHauptort, per_bankstelleHauptort, per_instrAbHauptort, per_instrBisHauptort, per_kostenstelleNrHauptort, per_kostenstelleBezHauptort, per_instradierungHauptort, per_buIDEinsatz, per_bankstelleEinsatz, per_einsatzortAb, per_einsartortBis, per_kostenstelleNrEinsatz, per_kostenstelleBezEinsatz, per_instradierungEinsatz, per_kategorie, per_gebnr, per_telEx, per_eintrittsdatum, per_austrittsdatum, per_letzterArbeitstag, per_pidAlt, per_pidStatus, per_reserve, per_email, per_quelle, per_importDatum, per_isActive, per_key)"+ "VALUES(@per_nummer, @per_pid, @per_name, @per_vname, @per_geburtstag, @per_sprache, @per_anrede, @per_buIDHauptort, @per_bankstelleHauptort, @per_instrAbHauptort, @per_instrBisHauptort, @per_kostenstelleNrHauptort, @per_kostenstelleBezHauptort, @per_instradierungHauptort, @per_buIDEinsatz, @per_bankstelleEinsatz, @per_einsatzortAb, @per_einsartortBis, @per_kostenstelleNrEinsatz, @per_kostenstelleBezEinsatz, @per_instradierungEinsatz, @per_kategorie, @per_gebnr, @per_telEx, @per_eintrittsdatum, @per_austrittsdatum, @per_letzterArbeitstag, @per_pidAlt, @per_pidStatus, @per_reserve, @per_email, @per_quelle, @per_importDatum, @per_isActive, @per_key)";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.AddWithValue("@per_nummer", isNull(line.Substring(0, 7)));
cmd.Parameters.AddWithValue("@per_pid", isNull(line.Substring(7, 7)));
cmd.Parameters.AddWithValue("@per_name", isNull(line.Substring(14, 20)));
cmd.Parameters.AddWithValue("@per_vname", isNull(line.Substring(34, 15)));
//cmd.Parameters.AddWithValue("@per_geburtstag", line.Substring(49, 8));
cmd.Parameters.AddWithValue("@per_geburtstag", stringToDate(line.Substring(49, 8)));
cmd.Parameters.AddWithValue("@per_sprache", isNull(line.Substring(57, 1)));
cmd.Parameters.AddWithValue("@per_anrede", isNull(line.Substring(58, 1)));
cmd.Parameters.AddWithValue("@per_buIDHauptort", isNull(line.Substring(59, 4)));
cmd.Parameters.AddWithValue("@per_bankstelleHauptort", isNull(line.Substring(63, 4)));
//cmd.Parameters.AddWithValue("@per_instrAbHauptort", line.Substring(67, 8));
cmd.Parameters.AddWithValue("@per_instrAbHauptort", stringToDate(line.Substring(67, 8)));
//cmd.Parameters.AddWithValue("@per_instrBisHauptort", line.Substring(75, 8));
cmd.Parameters.AddWithValue("@per_instrBisHauptort", stringToDate(line.Substring(75, 8)));
cmd.Parameters.AddWithValue("@per_kostenstelleNrHauptort", isNull(line.Substring(83, 3)));
cmd.Parameters.AddWithValue("@per_kostenstelleBezHauptort", isNull(line.Substring(86, 4)));
cmd.Parameters.AddWithValue("@per_instradierungHauptort", isNull(line.Substring(90, 10)));
cmd.Parameters.AddWithValue("@per_buIDEinsatz", isNull(line.Substring(100, 4)));
cmd.Parameters.AddWithValue("@per_bankstelleEinsatz", isNull(line.Substring(104, 4)));
//cmd.Parameters.AddWithValue("@per_einsatzortAb", line.Substring(108, 8));
cmd.Parameters.AddWithValue("@per_einsatzortAb", stringToDate(line.Substring(108, 8)));
//cmd.Parameters.AddWithValue("@per_einsartortBis", line.Substring(116, 8));
cmd.Parameters.AddWithValue("@per_einsartortBis", stringToDate(line.Substring(116, 8)));
cmd.Parameters.AddWithValue("@per_kostenstelleNrEinsatz", isNull(line.Substring(124, 3)));
cmd.Parameters.AddWithValue("@per_kostenstelleBezEinsatz", isNull(line.Substring(127, 4)));
cmd.Parameters.AddWithValue("@per_instradierungEinsatz", isNull(line.Substring(131, 10)));
cmd.Parameters.AddWithValue("@per_kategorie", isNull(line.Substring(141, 2)));
cmd.Parameters.AddWithValue("@per_gebnr", isNull(line.Substring(143, 6)));
cmd.Parameters.AddWithValue("@per_telEx", isNull(line.Substring(149, 17)));
//cmd.Parameters.AddWithValue("@per_eintrittsdatum", line.Substring(166, 8));
cmd.Parameters.AddWithValue("@per_eintrittsdatum", stringToDate(line.Substring(166, 8)));
//cmd.Parameters.AddWithValue("@per_austrittsdatum", line.Substring(174, 8));
cmd.Parameters.AddWithValue("@per_austrittsdatum", stringToDate(line.Substring(174, 8)));
//cmd.Parameters.AddWithValue("@per_letzterArbeitstag", line.Substring(182, 8));
cmd.Parameters.AddWithValue("@per_letzterArbeitstag", stringToDate(line.Substring(182, 8)));
cmd.Parameters.AddWithValue("@per_pidAlt", isNull(line.Substring(190, 7)));
cmd.Parameters.AddWithValue("@per_pidStatus", isNull(line.Substring(197, 1)));
cmd.Parameters.AddWithValue("@per_reserve", isNull(line.Substring(198, 6)));
cmd.Parameters.AddWithValue("@per_email", isNull(line.Substring(204, 78)));
cmd.Parameters.AddWithValue("@per_quelle", "HR");
cmd.Parameters.AddWithValue("@per_importDatum", DateTime.Now);
cmd.Parameters.AddWithValue("@per_isActive", checkAustritt(line.Substring(174, 8)));
cmd.Parameters.AddWithValue("@per_key", isNull(line.Substring(284, 40)));
cmd.ExecuteNonQuery();
// File schreiben für Bixi
file.WriteLine(line.Substring(0, 284));
}
// Schliessen des Files für Bixi
file.Close();
// Clean up
connection.Close();
logFileReader.Close();
logFileStream.Close();
// Rename File
File.Copy(fileName, fileName.Substring(0, (fileName.Length - 4)) + "_imported.bak", true);
// Das File muss gelöst werde, damit die stündlichi Prozedur nur einmal ausgeführt wird
File.Delete(fileName);
}
else
{
ret = 0;
}
return ret;
} // end method
// Methode prüft ob ein String leer ist
// Wenn JA wird NULL für die DB zurückgegeben, sonst der Text
private static Object isNull(String pText)
{
Object ret = DBNull.Value;
if (!(pText.Trim() == String.Empty))
{
ret = pText;
}
return ret;
} // end method
// Methode prüft, ob das Austrittsdatum länger als 12 Monate zurück liegt
// und setzt dem entsprechend das Flag 0 oder 1
private static int checkAustritt(String pPer_austrittsdatum)
{
int ret = 1; // Default auf 1 gesetzt
if(!(pPer_austrittsdatum.Trim() == String.Empty))
{
DateTime jetzt = System.DateTime.Now;
DateTime austritt = DateTime.ParseExact(pPer_austrittsdatum, "ddMMyyyy", System.Globalization.CultureInfo.CurrentCulture);
TimeSpan diff = jetzt.Subtract(austritt);
if (diff.Days > 365)
{
ret = 0;
}
}
return ret;
} // end method
// Methode wandelt ein String Datum ddmmyyyy in ein DateTime um
private static Object stringToDate(String pStringDate)
{
Object ret = DBNull.Value;
try
{
if (!(pStringDate.Trim() == String.Empty))
{
ret = DateTime.ParseExact(pStringDate, "ddMMyyyy", System.Globalization.CultureInfo.CurrentCulture);
}
}
catch (Exception ex)
{
ret = new DateTime(1800, 1, 1);
}
return ret;
} // end method
};
It woul help us alot if someone can help us.