using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.Security.Cryptography;
namespace sha_hash
{
public class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.None)]
public static SqlBytes GetHash(SqlString Algorithm, [SqlFacet(MaxSize = -1)] SqlBytes Plaintext)
{
if (Algorithm.IsNull || Plaintext.IsNull)
return SqlBytes.Null;
bool HashDefined = true;
HashAlgorithm Hash = null;
switch (Algorithm.Value.ToUpper())
{
case "SHA256":
Hash = new SHA256Managed();
break;
case "SHA384":
Hash = new SHA384Managed();
break;
case "SHA512":
Hash = new SHA512Managed();
break;
default:
HashDefined = false;
break;
}
if (!HashDefined)
{
throw new Exception("Unsupported hash algorithm - use SHA256, SHA384 or SHA512");
}
byte[] HashBytes = Hash.ComputeHash(Plaintext.Value);
// Convert result to a SqlBytes value
return new SqlBytes(HashBytes);
}
}
}
und
CREATE ASSEMBLY sha_hash FROM dateipfad WITH PERMISSION_SET = SAFE
Als Fehlermeldungen erhalte ich wenn ich den Assemblynamen mit nutze:
'Die "sha_hash"-Spalte oder die benutzerdefinierte Funktion bzw. das benutzerdefinierte Aggregat "sha_hash.UserDefinedFunctions.GetHash" wurde nicht gefunden, oder der Name ist mehrdeutig.'
Laut MSDN http://msdn.microsoft.com/en-us/library/w2kae45k%28v=VS.80%29.aspx
soll man ein SQL Server Projekt erstellen. Ich habe VSEE2008, scheinbar habe ich diesen Projekttyp nicht.
Deshalb habe ich gehofft, dass man das ganze auch einfach per DLL machen kann.
also habe ich den Code als DLL erstellt und im MSSQL Server als Assembly hinzugefügt.
Bis hierhin hat alles funktioniert. Nur lässt sich die Funktion GetHash nicht aufrufen.
Ich erhalte immer die Meldung
"'GetHash' wird nicht als Name einer integrierten Funktion erkannt."
Frage1: Lässt sich das überhaupt als DLL mit VSEE2008 machen?
Frage2: Wenn ja, warum lässt sich die Funktion nicht aufrufen? Muss ich noch was beachten?
Leider ist mir im Nachhinein aufgefallen, dass mein "Key" nicht immer eindeutig ist.
Dictionary<T> funktioniert da schon nicht mehr. Deshalb hab ichs erstmal doch wieder über object[][] geregelt.
Ich werde bei Zeit und Gelegenheit mal versuchen das per IEnumerable<T> und Dictionary oder Lookup zu lösen.
wobei objekt.next jeweils den nächsten usernamen liefert und value dann einen der dazugehörigen werte des usernamen liefert.
gibt es da schon eine passende klasse?
ich bin nicht sicher ob eine hashtable diese vorgehensweise unterstützen würde...
bisher habe ich es mit mehrdimensionalen arrays geregelt.
(string[][] user)
aber vllt gehts auch eleganter?
auf eine datatable würde ich auch gerne verzichten. :)
danke für die hilfe
afr0
hallo zusammen.
ich mache einen ftpwebrequest auf einen server:
EventLogs logs = new EventLogs();
logs.createLogFile();
//Ein Request erstellen an den ftp Server
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://merinserver");
request.EnableSsl = false;
//Die Methode angeben um eine Datei hochzuladen
request.Method = WebRequestMethods.Ftp.ListDirectory;
//Berechtigungsdetails setzen vom ftp Server durch Username und Passwort
request.Credentials = new NetworkCredential("user", "pass");
//Versuch eine Verbindung zu erstellen und eine Antwort zu erhalten
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
logs.writeFile("FROM CACHE: " + response.IsFromCache.ToString()); //ergebnis ist FALSE
logs.writeFile("URI: " + response.ResponseUri.AbsoluteUri); // ergebnis ist [URL]ftp://meinserver[/URL]
//Ein neuen Stream für den Response erstellen dem der FileStream mitgegeben wird.
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream, Encoding.Default);
while (sr.Peek() > -1)
{
//tu irgendwas
}
....
....
dabei frage ich einen ordner ab mit ListDirectory. der Ordner ist definitiv leer :)
als ftpwebresponse erhalte ich jedoch folgende meldung (wird in eine log datei geschrieben):
2009-08-18 11:09:21 : FROM CACHE: False
2009-08-18 11:09:21 : URI: ftp://meinserver
2009-08-18 11:09:21 : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2009-08-18 11:09:21 : <!-- HTML listing generated by Squid 2.6.STABLE12 -->
2009-08-18 11:09:21 : <!-- Tue, 18 Aug 2009 06:03:59 GMT -->
2009-08-18 11:09:21 : <HTML><HEAD><TITLE>
2009-08-18 11:09:21 : FTP Directory: ftp://user@meinserver/
2009-08-18 11:09:21 : </TITLE>
2009-08-18 11:09:21 : <STYLE type="text/css"><!--BODY{background-color:#ffffff;font-family:verdana,sans-serif}--></STYLE>
2009-08-18 11:09:21 : </HEAD><BODY>
2009-08-18 11:09:21 : <H2>
2009-08-18 11:09:21 : FTP Directory: <A HREF="/">ftp://user@meinserver/</A>/
...
...
<!-- hier kommt irgendwann eine datei, die aber nicht mehr auf dem server vorhanden ist -->
2009-08-18 11:09:21 : Generated Tue, 18 Aug 2009 06:03:59 GMT by irgendeinproxyserver.de (squid/2.6.STABLE12)
2009-08-18 11:09:21 : </ADDRESS></BODY></HTML>
ich möchte aber gerne wissen was _wirklich_ auf dem ftp server liegt.
hat jemand ne idee wie ich das anders abfragen kann und an die infos komme, die ich wirklich brauche?
Linq To Datasets ist evtl mal eine Lesestunde wert ;). Dann dürfte auch das Hantieren mit object aufhören.
LaTino
Ich habe das hier Abfragen für mehrere Tabellen (LINQ to DataSet) überflogen und es damit auch versucht, meine Daten aus dem DataSet zu holen. Deshalb bin ich auch so an dem 'new' hängen geblieben :)
Aber durchlesen werde ich es mir trotzdem noch mal.
select new
{
tableItemArray = tbin.ItemArray; //object[]
}
Leider hilft mir IEnumerable<object[]> qry = null auch nichts da object[] auch kein AnonymousType ist.
@dN!3L:
ich mache 2 Abfragen auf unterschiedliche Datenbanken von unterschiedlichen Servern und hole mir so die Daten die ich brauche. Im Fall mit dem Join muss ich die Daten der beiden Server verbinden. Im Fall ohne Join ist das speziell auf eine Tabelle nicht möglich.
Wenn Du doch eh ein AsEnumerable aufrufst, weißt Du doch, dass ein IEnumerable<T> zurückkommt.
Also nimm statt var einfach ein IEnumerable<T>, setz für T den korrekten Typ ein, und Du bist das Problem los.
Zitat
soweitichweiß musst du nicht initialisieren, aber du mußt deklarieren (var geht hier nicht, weils eine Deklaration ist, die sich aus der Initialisierung ableitet)
C#-Code:
IEnumerabls<DataRow> qry = null;
...
Achso - nee, du selectest ja je was ganz anderes.
Dann gehts nicht, weils 2 verschiedene Typen sind - die kannste natürlich nicht in dieselbe Variable stopfen.
In dem Fall bekomme ich folgende Exception:
Fehler 1 Der Typ "System.Collections.Generic.IEnumerable<AnonymousType#1>" kann nicht implizit in "System.Collections.Generic.IEnumerable<System.Data.DataRow>" konvertiert werden.
Hab mich schon gefreut, dass es so einfach klappt. Aber dem ist wohl doch nicht so...
btw: die Exception wird bei "select new" geworfen...
Fehler 1 Der Typ "System.Collections.Generic.IEnumerable<AnonymousType#1>" kann nicht implizit in "System.Collections.Generic.IEnumerable<System.Data.DataRow>" konvertiert werden.
vielleicht gibt es etwas in diese richtung:
var qry = from row in ds.Tables[0].AsEnumerable()
case textVariable.Equals("bla")
join row2 in ds.Tables[1].AsEnumerable()
on
.....
case textVariable.Equals("blubb")
//kein join
select new ...
Hallo. Falls die Frage schonmal gestellt wurde, so bitte schlagt mich nicht, dann hab ich sie nämlich nicht gefunden :)
Ich habe eine MySQL Tabelle auf der ich 2 unterschiedliche Abfragen mache.
Über einen String frage ich nun ab, welche Abfrage ausgeführt werden soll.
also "ist string = 'bla' dann führe abfrage1 aus, ist string = 'blubb' führe abfrage2 aus"
Ich möchte mit Linq To SQL nun das gleiche bei meinem DataSet durchführen.
Also die Linq To SQL Abfrage basierend auf der If Abfrage ändern.
also quasi sowas:
var qry = null; //funktioniert nicht, da hier initialisiert werden muss!
if (textVariable == "bla")
{
qry = from tbin ds.Tables[0].AsEnumerable()
select new
{
//irgendwas
};
}
else
{
qry = from tbin ds.Tables[0].AsEnumerable()
join ds.Tables[1].AsEnumerable() on
...
...
select new
{
//irgendwas ganz anderes
};
}
Leider funktioniert das so nicht, da ich der Nariable qry keinen typisierten Wert zuweisen darf / kann...
Ich habe was von Case Select Anweisungen in Linq To SQL gelesen aber weiß nicht wie diese funktionieren.
versuche ein neues object zu erzeugen, so ist dieses immer null, da die id nicht gefunden wird.
jetzt habe ich gesehen, dass ich dem xmldocument auch ein xmlshema zuweisen kann. dort gibt es auch die eigenschaft id aber die hilft mir auch nicht weiter...
wie kann ich nun mit getelementbyid auf mein node mit dem attribut ID zugreifen?
Ich suche nach einer Möglichkeit, einen Gehörschutz für Headsets zu programmieren.
Allerdings bin ich mir nicht ganz sicher, wie ich an die Sache ran gehen soll.
Eine Möglichkeit wäre, in Echtzeit den Audiostream durchgehend abzufragen (wenn das möglich ist...) und ab einem bestimmten Pegel das Headset auf "mute" zu schalten.
Vielleicht geht es aber auch eleganter.
ich weiß nicht ob deine frage noch halbwegs aktuell ist, noch ob meine methode dir da weiter hilft.
ich habe auch mal mit dem rsacryptoprovider daten ver und entschlüsselt. zum entschlüsseln bin ich folgendermaßen vorgegangen:
hi zusammen.
ich versuche gerade ein script zu schreiben, welches den putty ssh agent pageant.exe mit vorgegebenem private key und dessen passphrase startet...
bis zum key komme ich ganz einfach mit C:\pageant.exe C:\private.ppk
aber jetzt fehlt mir ein parameter für die übergabe der passphrase.
weiß jemand von euch, wie ich die passphrase mit übergeben kann?
oder hat jemand ne andere idee als cli parameter?
Hi zusammen.
ich benutze zum schreiben von daten in eine datatable den .net odbc provider:
Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\txtFilesFolder\;Extensions=asc,csv,tab,txt;
mit einem streamreader lese ich csv daten aus einer datei und schreibe sie in eine datatable.
streamreader.currentencoding sagt mir, dass das format unicode utf-8 ist.
mit einem streamwriter schreibe ich die daten aus der datatable in eine neue datei.
streamwriter.encoding ist streamreader.currentencoding. so sollte doch die zeichenkodierung richtig bleiben oder?
bleibt sie aber nicht.
ich habe jetzt alle möglichen kodierungen versucht. (programmierhans' zeichensatztester sei dank)
aber keine schreibt mir die daten richtig in die csv datei. umlaute werden immer falsch dargestellt.
meine frage nun: kann ich irgendwie für csv dateien mit odbc ne kodierung angeben oder die kodierung an meine datatable übergeben?
Ich habe mich jetzt in die sipek api ein wenig eingearbeitet.
die verbindung damit funktioniert sehr gut, jetzt geht es an die sprachübertragung.
im beispiel softphone wird die wavelibmixer.dll benutzt, dort wird der zugriff auf die soundkarten scheinbar geregelt.
hallo zusammen,
ich möchte ein softphone entwickeln und habe mich erstmal ein wenig hier im forum umgeschaut und mir ein paar infos zusammengesucht. aber ein paar fragen sind immer noch offen.
ich lege einfach mal los:
so ein softphone muss ja gewisse bedinungen erfüllen (sprache entgegennehmen - weiterleiten - ausgeben, protokolldaten verarbeiten, etc...)
deshalb war mein erster gedanke "wie erkennt mein softphone, dass ich spreche?".
und so ganz sicher bin ich mir dabei immer noch nicht. ich weiß, dass es API's gibt, wie bass.net oder das directx sdk. wird in dem fall das erkennen der sprache und das wiedergeben darüber gesteuert? oder macht das eventuell schon eine SIP API? (ich gehe eher von erstem aus)
da ich das softphone vielleicht um funktionen erweitern will, dachte ich, dass die entsprechende api für voip schon etwas können muss. entweder das SIP protokoll oder IAX sollen auf jeden fall genutzt werden.
auch hier gibt es die ein oder andere info. so weiß ich wohl, dass es pjsip gibt oder eben auch eine kommerzielle api von independentsoft.
wie sind eure erfahrungen damit und welche könnt ihr empfehlen (auch im hinblick auf eine mögliche kommerzielle entwicklung)?
welche erfahrungen habt ihr mit dem iax protokoll?
so das wars erstmal :)
ich freue mich über eure rückmeldungen
das problem hat sich nun gelöst. die dll benötigt abhängigkeiten des zu der dll gehörenden programms :)
es ist ne .net dll deshalb konnte ich diese auch nicht registrieren.
Hi Juka,
A) Externe DLL (ich denke mal eine .NET DLL)
B) hab auf nem fremden pc mit entwicklungsumgebung getestet und als fehlermeldung filenotfoundexception auf die dll bekommen
c) nein
ich habe gerade den tipp bekommen, dass es am registrieren der dll liegen kann.
ich registriere die dll jetzt mal auf dem fremd pc und werde mich dann noch mal melden :)
guten morgen,
ich habe gestern noch mal nach ähnlichen themen gegooglet dabei bin ich auf eine ähnliche frage gestoßen und dort hieß es, dass man dll's ins debug verzeichnis packen soll. das hat mir aber auch nicht geholfen.
kann es vielleicht an der dll liegen?
ich stehe hier wirklich auf dem schlauch... X(
ich habe eine dll die ich mittels 'verweis hinzufügen' in ein projekt von mir hinzugefügt habe. diese funktioniert bei mir auf dem pc, wo das projekt erstellt wurde, auch wunderbar.
wenn ich das erstellte release (die dll befindet sich im ordner release) nun von einem fremden pc starten will, findet dieser die dll nicht. beim debuggen ist mir aufgefallen, dass versucht wird, die dll im projektpfad zu finden aber nicht im verzeichnis, wo die anwendung gestartet wird...
wie kann ich das ändern, dass die dll an richtiger stelle gesucht wird?
dank im voraus
afr0
Sorry für Doppelpost aber das wollte ich gerne extra schreiben.
Danke XXX deine Variante funktioniert super.
Dieses Konstrukt kenne ich gar nicht. Wo kann ich das noch mal genauer nachlesen? Hast du dazu vllt einen Link?
die klassen die ich nutze sind aus einer dll. die dll kann ich nur einbinden und die klassen verwenden. überladen geht nicht, da es sich um ein client server gebilde handelt und in dem fall eine exception seitens dll (client version not allowed) geworfen wird.
die event methode übergibt nur einen parameter und das ist eine weitere klasse aus der dll.
als beispiel nehme ich mal mehrere gameserver auf denen mehrere spiele laufen können. ein spiel kann auf mehreren servern gespielt werden.
der GameMonitor überwacht die spiele
private void btn1_Click(object sender, EventArgs e)
{
GameServer gm = new GameMonitor();
gm.Username = "user1";
gm.Password = "pass1";
gm.OnRefreshGame +=
new GameMonitor.OnRefreshGameEventHandler(gm_OnRefreshGame);
gm.Start();
}
void gm_OnRefreshGame(Game g)
{
//auslesen welches spiel gespielt wird. hier gibts keine verbindung zwischen spiel
//und GameMonitor mehr.
Console.WriteLine(g.GameName);
}
ich hoffe es ist jetzt verständlicher :)
@ XXX:
wenn ich deinen code richtig verstehe, kann ich so also das event 'erweitern'?
gruß