verdammt... da bekomme ich den gleichen fehler 😃 "bad request (400)"
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="HttpBinding_IService1"
transferMode="StreamedRequest" maxBufferSize="200000000" maxReceivedMessageSize="200000000" maxBufferPoolSize="200000000" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:2916/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="HttpBinding_IService1" contract="ServiceReference1.IService1"
name="HttpBinding_IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
Das ist schon etwas traurig wenn man nichtmal ein paar Zahlen von a nach b schaufeln kann...arg
hallo,
das hat leider auch nicht geholfen...
maxBufferPoolSize geht auch schinbar nur in der basichHttp-Bindung
Hallo zusammen,
ich scheiter mal wieder an einem scheinbar simplen Problem.
ich möchte ein Integer-Array mit über 1000 Einträgen an den Webservice senden.
Dazu verwendet ich folgende WS-Methode.
public interface IService1
{
[OperationContract]
void SendData(int[] largeArray);
// AUFGABE: Hier Dienstvorgänge hinzufügen
}
Und einen Client der einfach ein Array sendet:
class Program
{
static void Main(string[] args)
{
using (ServiceReference1.Service1Client client = new WCFTestServiceReference1.Service1Client())
{
List<int> liste = new List<int>();
for (int i = 0; i < 3000; i++)
{
liste.Add(i);
}
client.SendData(liste.ToArray()) ;
}
}
}
Nun schlägt dieser Aufruf leider fehl da das Array scheinbar zu groß ist (mit einem Array der größe 1000 funktioniert es):
Der Remoteserver hat eine unerwartete Antwort zurückgegeben: (400) Bad Request.
meine config sieht so aus:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<httpRuntime maxRequestLength="2097151" />
</system.web>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IService1" closeTimeout="00:10:00" openTimeout="00:10:00"
receiveTimeout="00:10:00" sendTimeout="00:10:00" transactionFlow="false"
hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="6000000">
<readerQuotas maxDepth="32" maxStringContentLength="524288" maxArrayLength="6000000" maxBytesPerRead="1048576" maxNameTableCharCount="262144" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:2916/Service1.svc" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
name="WSHttpBinding_IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
Ich kann das nicht wirklich verstehen da 3000 Einträge nach meiner Meinung nicht viel ist. Vielleicht hab ich auch einfach irgendein Attribut beim Binding vergessen. Hatte von euch schon mal dieses Problem?
ich möchte wenn in einem datagrid ein neuer datensatz eingefügt wird dort hinspringen. danke für den tip, ich werd das gleich mal testen.
Hallo,
ich möchte gerne beim Event:
personBindingSource.AddingNew += new AddingNewEventHandler(personBindingSource_AddingNew);
zum dem gerade eingefügten Element springen. Also Current soll dann auf das eingefügte Element zeigen.
Ich hab das per Find-Methode probiert allerdings bekam ich hier die Ausnahme das IList implementiert sein muss. Gibts es hier einen einfacheren Weg den Zeiger auf ein bestimmtes Element zu setzen?
GRuß
Hallo,
kennt jemand ein kostenfreies Programm zum Auslesen von Webservices?
Ich möchte mir eigentlich nur komfortabel das XML was bei einem Methodenaufruf zurückgegeben wird anschauen. Ich bin der Meinung soetwas in einem MSDN-Webcast gesehen zu haben.
GRuß
Wenn die LinkedList<(Of <(T>)>) leer ist, enthalten die First-Eigenschaft und die Last-Eigenschaft null....
alles klar, ich denke jetzt hab ichs 😃
LinkedList<T>-Klasse (System.Collections.Generic)
aber muss nicht irgendwie festgestellt werden ob das ende erreicht ist?
ja null weil i==max
woher weißt du denn das du am ende bist?
Hallo,
ich würde gerne in meiner MVC-Applikationi die Kultur setzen und zwar soll dazu eine Drop-Down-Liste auf der Masterpage liegen die eine Action aufruft (SetLanguage oder sowas). In der Session soll dann die ausgewählte Kultur z.B. als ID abgespeichert werden.
Mein erstes Vorgehen war alle Controller von einer Elterklasse ("ApplicationController") abzuleiten und dort die Methode SetLanguage abzulegen. Ist das hier das richtige Vorgehen?
Ich müsste nachdem ich die Kultur gesetzt habe den Controller von dem der Aufruf ausging neuladen. Leider ist ja meine Action im Eltern-element 😃. Als Workaround hab ich hier die letzte URL gespeichert. Für wirkt das irgendwie zu kompliziert. Hat jemand soetwas schon einfacher umgesetzt?
MasterPage
<%-- Spracheinstellung --%>
<label for="Culture">
Sprache:</label>
<%= Html.DropDownList("Cultures", (SelectList)ViewData["Cultures"], new { onchange = "setCulture(\"" + Html.Route(ViewContext.Controller) + "\")" // Html.Route -> gibt die momentane Route zurück})%>
function setCulture(routeLink) {
$.getJSON("/Application/SetCulture/", { cultureID: $("#" + culture).val() }, null);
window.location.reload();
}
ApplicationController:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
InitCulture();
base.OnActionExecuting(filterContext);
}
/// <summary>
/// Liefert eine Liste der Kultureinstellungen
/// </summary>
public void InitCulture()
{
String selectedItem = String.Empty;
List<CultureItem> cultures = Culture.Cultures;
if (Session != null && Session[Defines.CultureSN] != null)
{
String cultureID = Session[Defines.CultureSN] as String;
SelectListItem selectedCultureItem = cultures.Where(c => c.Value.Equals(cultureID)).First();
selectedCultureItem.Selected = true;
}
ViewData["Cultures"] = new SelectList(cultures, "Value", "Text");
}
/// <summary>
/// Setzt die Kultur für den aktuellen Thread und speichert die Kultur in der Session.
/// </summary>
public void SetCulture(String cultureID)
{
int id = -1;
try
{
id = Int32.Parse(cultureID);
}
catch
{
return;
}
CultureItem culture = Culture.GetCultureById(id);
//Kultur setzen
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture.Culture);
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(culture.Culture);
//und in Session speichern
Session[Defines.CultureSN] = culture.Value;
}
}
könnte man sich nun streiten was ne while schleife macht 😃
ja hast wohl recht, zu erklären wie ne schleife geht bringt hier wohl nichts.
ich geh da jetzt mal naiv ran... letztendlich ist es ja ne for schleife
[EDIT=herbivore]Nein, foreach ist, wie man in der Sprachspezifikation nachlesen kann, intern als while-Schleife über einen Enummerator realisiert; siehe Ist foreach intern eine for oder eine while-Schleife?[/EDIT]
saädjhas#odjoashdo#ASH#oahj
das war der abschluss eines katastrophalen tags...
ich danke dir!!!
Ich bin hier langsam am Verzeifeln. Alles was ich mach möchte ist automatisch von einer Action zu einer anderen weiterzuleiten:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
RedirectToAction("About");
return View();
}
public ActionResult About()
{
return View();
}
}
wenn ich das gleiche per Html.ActionLink über die Sicht mache klappt das natürlich. Hat jemand eine Idee?
hallo,
danke für die links, werd ich mir gleich mal anschauen.
ja ich hab keine console 😃 dann gehts zur standardausgabe ins visual studio.
Hallo,
ich versuche schon krampfhaft den ganzen tag in meiner MVC-Webanwendung log4net zum laufen zu bekommen. In einer Consolenanwendung hab ich dies in einer Minute hinbekommen aber scheinbar übersehe ich etwas.
Ich habe eine ganz frische MVC-Anwendung erstellt.
in der Global.asax initialisiere ich in der Methode Application_Start() den logger.... das klappt scheinbar laut log4net debugging auch.
String cfg = @"....Logger\logger.config";
if (System.IO.File.Exists(cfg))// das funktioniert
{
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(cfg));
}
ILog l = log4net.LogManager.GetLogger("test");
l.Debug("asdas");
RegisterRoutes(RouteTable.Routes);
Leider kommt einfach keine Logging-Meldung. Ich kann das einfach nicht verstehen. Auch eine Ausnahme wird nicht geworfen. Hier noch das wichtigste der Inhalt der log4net konfiguration:
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
hat jemand eine Idee? Oder gibts es hierzu eine Beispielanwendung? Google hat mir dort leider nicht geholfen.
nachtrag: in diesem beispiel lade ich die konfiguration über eine externe datei (klappt in konsolenanwendung). ich hab dies auch schon erfolglos über web.config probiert.
besten Dank!
Hallo,
ich wollte im Visual Studio ein WCF-Dienst erstellen...
mir ist aufgefallen, dass es noch die ASP.Net Webdienst-Projekte gibt wo die Methoden über das Attribut [Webmethod] und nicht über [OperationContract] deklariert werden. Außerdem gibt es dort auch kein Interface.
Kann mir jemand erklären wozu dieses Projekt gut sein soll? Ich hatte bisher immer erfolgreich mit der WCF-Dienstanwendung gearbeiter. Hier habe ich auch die ServiceContracts erstellt.
ja, wenn schon if dann
if (wert == "1") {
//Anweisung
}
else if (wert == "2") {
//Anweisung
}
...
ich würde auch auf jeden fall switch in diesem fall nehmen. Hier ist klar, dass sich die abfrage genau auf eine variable bezieht. Damit schafft man gute übersichtlichkeit.
ich versteh nicht ganz...testest du verschiedene verfahren?
http://de.wikipedia.org/wiki/First_In_%E2%80%93_First_Out
http://de.wikipedia.org/wiki/Highest_In_%E2%80%93_First_Out
usw...?
wo ist das genaue problem?
fall ich etwas zu Integer casten möchte teste ich vorher ob es sich dabei um einen Integer-Typ handelt.
Mit dem "as" war ja auch für den Byte[] - Fall gedacht. Ich verwende das recht häufig, da es recht kurz ist und gleichzeitig eine überprüfung auf null danach ausführen kann.
das ist mit schon klar, dafür prüft man vorher ja den datentyp auf int
warum sollte das mit nicht ref-typen nicht gehen? int x = (int)value;
sollte genauso gehen... mit as spart man sich nur das prüfen auf den typ. allerdings muss man auf null prüfen. eigentlich gehüpft wie gesprungen.
so gehts zumindest bei mir in jedem fall...
class Program
{
static Byte[] buffer;
static void Main(string[] args)
{
Byte[] b = new Byte[] { 1, 2, 3 };
Test<Byte[]>(b);
if (buffer == null)
return; //...
}
public static void Test<T>(T value)
{
Byte[] buffer = value as Byte[];
}
}
verwendetes Datenbanksystem: Entity Framework, MS SQL 2008
Hallo,
ich habe eine n-tier-anwendung und möchte ein EnityObject welches ich vom Context getrennt habe mit einer neuen Relation versehen.
In meinem konkreten Fall habe ich eine Entität Person die eine Adresse besitzen kann. Nun möchte ich der Person eine Entität hinzufügen und hatte dies versucht, in dem ich erst die Adresse eingefügt hatte und danach die Person aktualisiert hatte.
hier hatte ich gelesen, dass man dies über den RelationShipMananager machen muss.
Entity-Framework-Detached-Instances.
Hat jemand vom euch damit erfahrungen?
public void AddAdresseToPerson(Adresse adresse, Person person)
{
try
{
// hinzufügen der Adresse zur Person
}
catch (InvalidOperationException ex)
{
throw ex;
}
}
ja, das ist wohl so.... momentan hab ich leider keine alternative.
auf jeden fall war mir der vorteil des o/r-mappers im zusammenhang mit verschiedenen db-strukturen noch nicht so klar. das ist wohl ein wirklich enormer vorteil von mappern.
wenn ich nur an navision denke....dort sind so viele tabellen drin. da stürzt das management studio ab 😃 geht nur über systemtabellen... naja 😃 da ist auch was falsch gelaufen bei den jungs
also ich hab das gerade probiert und nach meiner Meinung funktioniert dies ohne weiteres. es ist ja letztendlich doch alles typisiert.
Service:
public class Service1 : IService1
{
public ExtendetData<String> GetHello()
{
return new ExtendetData<string>("hallo");
}
public ExtendetData<Auto> GetCustomClass()
{
return new ExtendetData<Auto>(new Auto("Golf", "Volkswagen"));
}
}
[ServiceContract]
public interface IService1
{
[OperationContract]
ExtendetData<String> GetHello();
[OperationContract]
ExtendetData<Auto> GetCustomClass();
}
[DataContract]
public class Auto
{
private String _name;
private String _hersteller;
[DataMember]
public String Name
{
get { return _name; }
set { _name = value; }
}
[DataMember]
public String Hersteller
{
get { return _hersteller; }
set { _hersteller = value; }
}
public Auto(String name, String hersteller)
{
this._hersteller = hersteller;
this._name = name;
}
}
[DataContract]
[Serializable]
public class ExtendetData<T>
{
T content;
bool fehlendeDaten = false;
public ExtendetData(T content)
{
this.content = content;
}
[DataMember]
public bool FehlendeDaten
{
get
{
// simuliere Fehler
fehlendeDaten = true;
return fehlendeDaten;
}
set { fehlendeDaten = value; }
}
[DataMember]
public T Content
{
get { return content; }
set { content = value; ; }
}
}
und der Client:
static void Main(string[] args)
{
using (ServiceReference1.Service1Client client = new ConsoleApplication1.ServiceReference1.Service1Client())
{
ServiceReference1.ExtendetDataOfstring result = client.GetHello();
if (result.FehlendeDaten)
Console.WriteLine("da fehlt was, aber ich zeig dir die daten an die ich berechnen konnte...");
Console.WriteLine(result.Content);
ServiceReference1.ExtendetDataOfAutoAJw_PARbn extendedAuto = client.GetCustomClass();
if (extendedAuto.FehlendeDaten)
Console.WriteLine("da fehlt was, aber ich zeig dir die daten an die ich berechnen konnte...");
Console.WriteLine("Name:" + (extendedAuto.Content.Name));
Console.ReadKey();
}
}
ich möchte eine Anwendung programmieren, die benutzerabhängig Daten aus der jeweiligen Datenbank ausliest.
ok. aber in diesem zusammenhang würde ich das nicht naheliegend finden. denn bei benutzerabhängigen daten sollten sich die strukturen normalerweise nicht unterscheiden.
vielleicht gibt es diesen fall auch, aber ich sehe ihn bisher nicht. wer soll denn diese struktur warten...
naja genau wegen dem andere mapping halt. da sollte es schon einen trifftigen grund geben warum man sowas benötigt.
ist das üblich mehrere datenbanken anzulesen?
welchen o/r mapper verwendest du denn?
ich hab aber noch nie gehört, dass man eine extra-datenbank erstellt für einen anderen nutzer. ist das wirklich notwendig? kannst du nicht z.B. mit einem "Schema" arbeiten
[Benutzername].[Tabellenname]. Vielleicht geht das auch noch einfacher.
wie hälst du denn die Struktur gleich? das ist eigentlich eine gefahrenquelle. ich kenn aber natürlich deinen anwendungsfall nicht.
vielleicht hilft dir das:
Trennung von Benutzer und Schema
bist du dir sicher List<xy> ist doch auch generisch und das unterstütz der ws auf jeden fall...
hi,
was meinst du mit benutzerspezifischen daten?
die datenbank kann man beim dem o/r-mapper ohne weiteres wechseln, nur die struktur muss die gleiche sein. kann du vielleicht ein beispiel posten?
wenn man richtig dynamische abfragen mit linq machen möchte braucht man glaube ich noch eine erweiterung.
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
Hallo,
ich würde gerne mal wissen wie ein geeigneter Weg ist Daten von einem Webservice mit zusätzlichen Informationen zu versehen. Hintergrund ist folgendes...
Bei einigen Methoden seitens des Webservice kann es sein, dass die Datengrundlage nicht vollständig ist und daher nicht die komplette Berechnung durchgeführt werden kann. Einie Ausnahme auszulösen ist aber zu viel da ja einige Daten berechnet werden könnten. Sonst hätte ich einfach die Ausnahme weitergereicht. Dem Nutzer am Client soll dann einfach angezeigt werden, dass einige Daten fehlen und daher nicht alles berechnet werden konnte. Ich hab einfach eine generische Klasse erstellt die zusätzlich Informationen bereitstellen kann... siehe Beispiel:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String helloWorld = "Hallo Welt";
ExtendedData<String> w = new ExtendedData<String>(helloWorld);
if (w.FehlendeDaten)
Console.WriteLine("Es hat etwas gefehlt, ich zeig dir die Daten aber trotzdem an");
Console.WriteLine(w.Content);
}
}
/// <summary>
/// Daten die noch eine Information enthalten ob alle Basisdaten vorlagen.
/// </summary>
/// <typeparam name="T"></typeparam>
class ExtendedData<T>
{
T content;
bool fehlendeDaten = false;
public ExtendedData(T content)
{
this.content = content;
}
public bool FehlendeDaten
{
get
{
// simuliere Fehler
fehlendeDaten = true;
return fehlendeDaten;
}
set { fehlendeDaten = value; }
}
public T Content
{
get { return content; }
}
}
}
hat jemand schon einmal etwas in der art implementiert?
man könnte natürlich auch argumentieren, dass der client über eine separate methode die vollständigkeit der daten prüfen muss und der webservice selbst "dumm" ist.
was haltet ihr von dieser Lösung?
alles klar,
mach ich so. hatte nur gedacht, dass die session vielleicht etwas zu übertrieben dafür ist.
ich hab mal noch eine andere frage zu einem controller insgesamt.
in meinem formular wird ein filter gesetzt. ist es aufgabe des controllers diesen filter zurückzuhalten?
ich hätte gedacht, dass ich den vielleicht in einer variable im controller selber speichern kann. das würde aber meiner meinung nach dem mvc-prinzip wiedersprechen...
private static EasyFilterSelection _filterSelection;
public ActionResult Index()
{
_filterSelection=null;
return View();
}
public ActionResult SetFilter(EasyFilterSelection filterSelection)
{
_filterSelection = filterSelection;
return View("Index");
}
public ActionResult ZeigFilter()
{
ViewData["FilterSelection"] = _filterSelection.Firm;
return View("Index");
}
danke, ich werd mir das mal anschauen. hab bisher nur die standardroute verwendet.
ich hab nochmal das ganze überprüft, der fehler beim mir lag an einem <form>-tag der noch um mein form geschachtelt war. das hatte ich übersehen. daher kam wohl das nicht nachvollziehbare verhalten.
Gruß
Problem gelöst... der Controller bei BeginForm(<"Action">,<"Controller">) muss scheinbar explizit angegeben werden. könnte ein Bug sein, zumindest gehts bei mir nicht anders.
Html.BeginForm("SetFilter", "MeinController")
Hallo ich hab folgendes Formular in einer View:
<% using (Html.BeginForm("SetFilter")) %>
<% {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="period">
Zeitraum:</label>
<%= Html.DropDownList("period")%><br />
</p>
<p>
<label for="firm">
Firma:</label>
<%= Html.DropDownList("firm")%><br />
</p>
<p>
<label for="esType">
EATyp:</label>
<%= Html.DropDownList("esType")%><br />
</p>
<p>
<label for="funds">
Fonds::</label>
<%= Html.DropDownList("funds")%><br />
</p>
<p>
<input type="submit" value="Filter" />
</p>
</fieldset>
<% } %>
und zwei ControllerActions:
// Html.BeginForm() geht hier hin im Debugmodus
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(EasyFilterSelection filter)
{
return View();
}
// Html.BeginForm("SetFilter") soll hier hingehen, tut es aber nicht
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SetFilter(EasyFilterSelection filter)
{
return View();
}
wobei Html.BeginForm("SetFilter") sagt, dass das Ziel die Aktion SetFilter im aktuellen Controller ist. Leider funktioniert das nicht, wobei ich nicht verstehen weshalb es nicht geht. Als ich einfach Html.BeginForm() schrieb und eine Index Aktion geschrieben hab die ebenfalls diesen Parameter annimmt ging es allerdings.
Kann mich jemand über die Verwendung von Html.BeginForm("yxx") aufklären?
Client ist wohl ein sehr schlechter Ausdruck dafür. ich meinte damit letzte Schicht wo der Wert der Mittelschicht abgerufen wird.
Hallo,
ich habe mal eine Frage zu WCF.
Ich hatte mir folgenden vreeinfachten Aufbau gedachte.
Ich habe ein Client-Projekt (Päsentation/Logik) und ein Projekt, welches Daten von einem Webservice per WCF abruft.Hierfür habe ich eine Klassenbibliothek erstellt und für den Client eine einfache Consolenanwendung.
Über eine statische Klasse werden Methoden bereitgestellt wo ein einfacher String vom Webservice geliefert wird:
public static class WebService
{
private static ServiceReference1.Service1SoapClient client = new ClassLibrary1.ServiceReference1.Service1SoapClient();
public static String GetBlub()
{
return client.Blub();
}
}
Der Client ruft diese Methode auf:
class Program
{
static void Main(string[] args)
{
WebService.GetBlub();
}
}
Jetzt tritt hier für mich ein Phänomen auf:
Zur Laufzeit tritt eine Ausnahme auf:
"Es wurde kein standardmäßiges Endpunktelement gefunden, das auf den Vertrag "ServiceReference1.Service1Soap" im ServiceModel-Clientkonfigurationsabschnitt verweist. Dies kann folgende Ursachen haben: Für die Anwendung wurde keine Konfigurationsdatei gefunden, oder im Clientelement wurde kein Endpunktelement gefunden, das diesem Vertrag entsprach."}
Wenn ich die App.Config aus der Klassenbiliothek zum Client kopiere geht diese allerdings? Was soll das - mein Client soll nicht die Adresse vom Webservice kennen müssen. Für mich ist das irgendwie unlogisch da ja lediglich ein String übermittelt wird. Hab ich hier einen Denkfehler?
Ich hoffe mir kann jemand Tipps geben.
Wie die Logik verteilt ist soll hier nur zum Test sein.
ich habs jetzt auch so gemacht...sieht halt ziemlich ******** aus 😃,naja egal:
FilterRow row = filterTable.NewFilterRow();
if (firm_id != -1)
row.Firma_ID = firm_id;
if (irgenwas_id != -1)
row.Irgendwas_ID = irgendwas_id;
....
row.Irgendwas_ID= null | DBNull.Value geht leider nicht sonst könnte man das mit einer Zeile erschlagen a la firm_id==-1? DBNull.Value : firm_id
ähm nicht konstruktor sondern die methode zum erstellen einer datarow, sorry.