Invalid Cast Exception, Gespeicherte Prozedur, LINQ TO SQL
9 Monate später das gleiche problem wieder auftaucht. Ich habe versucht, alles, was ich denken kann:
- Ich cast (varchar(max) für die gespeicherte Prozedur;
- Ich habe die mapping;
- versucht zu finden, die Sammlung linq funktioniert mit, konnte Sie aber nirgends finden;
Ich betreibe diese gespeicherte Prozedur für einige Zeit das Mapping zu meiner Objekte über LINQ to SQL, und jetzt, ganz plötzlich, LINQ versucht zu casten das Feld 'Wert' als verdoppeln.
der Fehler:
specified cast is not valid
System.Data.SqlClient.SqlBuffer.get_Double()
System.Data.SqlClient.SqlDataReader.GetDouble(Int32 i)
Read_Field(ObjectMaterializer`1 )
System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
CmsCsharp.BL.FieldManager.FindContentField(Int32 id_content, Int32 id_fieldType, String fieldName)
die Methoden
public static Field FindContentField(int id_content, int id_fieldType, string fieldName)
{
using (DbBase conn = new DbBase())
{
try
{
return conn.ClientDB.sprocFindContentField(id_content, id_fieldType, fieldName).Single();
}
catch (Exception e)
{
return null;
}
}
}
[Function(Name = "dbo.sprocFindContentField")]
public ISingleResult<Field> sprocFindContentField([Parameter(DbType="Int")] System.Nullable<int> id_content, [Parameter(DbType="Int")]System.Nullable<int> id_fieldType, [Parameter(DbType="Varchar(255)")]string fieldName)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), id_content, id_fieldType, fieldName);
return ((ISingleResult<Field>)(result.ReturnValue));
}
Bereich:
public class TextField : Field
{
private string _Value;
[Column(Storage="_Value", DbType="VarChar(MAX) NOT NULL", Name="value", CanBeNull=true)]
public string Value
{ //get and set }
}
das Verfahren:
SELECT
type = 'textField',
fieldLabel.id_fieldEditor,
fieldLabel.id_fieldType ,
fieldLabel.description,
fieldLabel.id ,
sessionField.id AS relationId,
fieldLabel.name ,
fieldText.content AS value,
fieldText.id AS valueId,
cf.id as contentRelationId
FROM
fieldLabel
INNER JOIN
sessionField
ON
sessionField.id_fieldLabel = fieldLabel.id
INNER JOIN
cms_contentField AS cf
ON
cf.id_sessionField = sessionField.id
INNER JOIN
fieldText
ON
fieldText.id = cf.id_fieldValue
INNER JOIN
fieldType
ON
fieldLabel.id_fieldType = fieldType.id
INNER JOIN
fieldTable
ON
fieldTable.id = fieldType.id_fieldTable
WHERE
cf.id_content = @id_content
AND
fieldTable.id = 1
Aus Neugier... was aus, die Fehlermeldung deutete Sie an diesem bestimmten Feld?
Könnte Sie posten Sie Ihre Datenbank-Tabelle schema?
Marcg Gravell: Weil, wenn ich entfernen Sie die Zuordnung zu dem Feld, wird die Ausnahme nicht ausgelöst.
Gute Antwort ;-p
id_fieldEditor int, id_fieldType int, Bezeichnung varchar(1500), id int, relationId int, name varchar(255), value varchar(max), valueId int, int contentRelationId
Könnte Sie posten Sie Ihre Datenbank-Tabelle schema?
Marcg Gravell: Weil, wenn ich entfernen Sie die Zuordnung zu dem Feld, wird die Ausnahme nicht ausgelöst.
Gute Antwort ;-p
id_fieldEditor int, id_fieldType int, Bezeichnung varchar(1500), id int, relationId int, name varchar(255), value varchar(max), valueId int, int contentRelationId
InformationsquelleAutor Eduardo Mello | 2009-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Vermutung ist, dass Sie einen Wert in Ihre Tabelle, die den Trigger auslösenden SQL-Server die Konvertierung über die "numerische" Datentyp. D. H. Ihr Wert wird konvertiert und in einem ungenauen Datentyp (float-oder real -) und verursacht LINQ to SQL zu versuchen, eine Doppel. Finden Sie die Vorsicht in SQL-Server Hilfe-Datei für int
Ich sah, dass. Aber wenn Sie Lesen, dass link Sie werden sehen, dass bestimmte Transaktionen in einer parametrisierten Abfrage umwandeln eines int in einen numerischen und damit Rückkehr einen numerischen Wert, da es sich um eine ungenaue Daten geben, werden Sie so behandelt, als eine Verdoppelung .Net.
interessant. Aber ich bin mir ziemlich sicher, dass das problem in der 'value' - Feld, da die exception wird nicht ausgelöst, wenn ich den Kommentar der Zeile, die Karten das Feld an der Immobilie. Und das Feld ist ein varchar(max), also, ich sehe nicht, wie das int problem wäre in diesem Falle gelten. Kennen Sie eine gute Möglichkeit, genau herauszufinden, welches Feld die Ursache für das problem?
InformationsquelleAutor Jacob Proffitt
Habe ich geändert, der 9. Zeile in der gespeicherten Prozedur zu fieldText.Inhalt
dann wechselte ich das mapping entsprechend:
- und es funktionierte!
Habe keine Ahnung, warum es funktionierte. Hat die Beschriftung (als Wert) könnte die Ursache sein?
Danke
InformationsquelleAutor Eduardo Mello
Ich bin spät mit der gleichen Fehlermeldung im gleichen Kontext.
Das problem war ein unamed Spalte in meiner Proc Lager führen. Kein problem excute es im management studio. Kein problem, registrieren Sie es in meinem dbml, aber ungültigen cast zur Laufzeit.
Hoffe, das hilft
InformationsquelleAutor Gabriel Albert