C# Linq数据库插入错误
所以我有以下方法:C# Linq数据库插入错误,c#,database,linq,C#,Database,Linq,所以我有以下方法: public void dataSchreiben(Messdaten data) { try { var ctxMess = new MessdatenDataContext(); var messSchreiben = new Messdaten() { stromschwSoll = data.stromschwSoll,
public void dataSchreiben(Messdaten data)
{
try
{
var ctxMess = new MessdatenDataContext();
var messSchreiben = new Messdaten()
{
stromschwSoll = data.stromschwSoll,
stromscwIst = data.stromscwIst,
stromMaxSoll = data.stromMaxSoll,
stromIst = data.stromIst,
drehzahl = data.drehzahl,
sollwerDrehmMaxon = data.sollwerDrehmMaxon,
istwertDrehmMaxonDR1 = data.istwertDrehmMaxonDR1,
istwertDrehmMaxonDR2 = data.istwertDrehmMaxonDR2,
rueckdrehmSollImLauf = data.rueckdrehmSollImLauf,
ruedrehmIstImLaufDR1 = data.ruedrehmIstImLaufDR1,
ruedrehmIstImLaufDR2 = data.ruedrehmIstImLaufDR2,
ruedrehmSollLosbrechen = data.ruedrehmSollLosbrechen,
ruedrehmIstLosbrDR1 = data.ruedrehmIstLosbrDR1,
ruedrehmIstLosbrDR2 = data.ruedrehmIstLosbrDR2,
sollwVerdrspGetriebe = data.sollwVerdrspGetriebe,
istwVerdrspGetriebe = data.istwVerdrspGetriebe,
sollVerdrehspGeber = data.sollVerdrehspGeber,
istwVerdrehspGeber = data.istwVerdrehspGeber,
serialNummer = "Succes"
};
ctxMess.Messdaten.InsertAllOnSubmit(messSchreiben);
try
{
ctxMess.SubmitChanges();
}
catch (Exception e)
{
Console.WriteLine(e);
ctxMess.SubmitChanges();
}
}catch {
MessageBox.Show("Schreiben error !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
我有一个数据库,它包含21个字段(一个索引自动增量和一个时间戳)。Messdaten数据是一个包含以下字段的结构。InsertAllOnSubmit返回此错误:
System.Data.Linq的类型参数
InsertAllOnSubmit(System.Collections.IEnumerable
) -. 方法不能通过从
语法。显式输入类型参数
此外,我的变量是双重类型的,而在数据库中它们保存为float。这会产生问题吗?还是其他原因?
我在谷歌上搜索,但没有找到解决办法
public struct Messdaten //a structure containing all the elements of the measurements
{
public double stromschwSoll;
public double stromscwIst;
public double stromMaxSoll;
public double stromIst;
public double drehzahl;
public double sollwerDrehmMaxon;
public double istwertDrehmMaxonDR1;
public double istwertDrehmMaxonDR2;
public double rueckdrehmSollImLauf;
public double ruedrehmIstImLaufDR1;
public double ruedrehmIstImLaufDR2;
public double ruedrehmSollLosbrechen;
public double ruedrehmIstLosbrDR1;
public double ruedrehmIstLosbrDR2;
public double sollwVerdrspGetriebe;
public double istwVerdrspGetriebe;
public double sollVerdrehspGeber;
public double istwVerdrehspGeber;
public string serialNummer;
}
public Messdaten aktMessung;
以及数据库声明:
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Messdaten")]
public partial class Messdaten : INotifyPropertyChanging, INotifyPropertyChanged
{
private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
private int _Index;
private System.Nullable<System.DateTime> _TimeStamp;
private System.Nullable<double> _StromschwSollLastlos;
private System.Nullable<double> _StromschwIstLastlos;
private System.Nullable<double> _StromMaxSollLastlos;
private System.Nullable<double> _StromMaxIstLastlos;
private System.Nullable<double> _DrehzahlMaxonmotor;
private System.Nullable<double> _SollwertDrehmMaxon;
private System.Nullable<double> _IstwertDrehmMaxonDR1;
private System.Nullable<double> _IstwertDrehmMaxonDR2;
private System.Nullable<double> _RueckdrehmSollImLauf;
private System.Nullable<double> _RuedrehmIstImLaufDR1;
private System.Nullable<double> _RuedrehmIstImLaufDR2;
private System.Nullable<double> _RuedrehmSollLosbrechen;
private System.Nullable<double> _RuedrehmIstLosbrDR1;
private System.Nullable<double> _RuedrehmIstLosbrDR2;
private System.Nullable<double> _SollwVerdrspGetriebe;
private System.Nullable<double> _IstwVerdrspGetriebe;
private System.Nullable<double> _SollVerdrehspGeber;
private System.Nullable<double> _IstwVerdrehspGeber;
private string _SerialNummer;
[global::System.Data.Linq.Mapping.TableAttribute(Name=“dbo.Messdaten”)]
公共部分类Messdaten:INotifyPropertyChanged,INotifyPropertyChanged
{
私有静态属性ChangingEventArgs emptyChangingEventArgs=新属性ChangingEventArgs(String.Empty);
私有整数指数;
私有系统。可为空的_时间戳;
私有系统.可空的_StromschwSollLastlos;
私有系统。可为空的_StromschwIstLastlos;
私有系统.Nullable_StromMaxSollLastlos;
私有系统。可空的_StromMaxIstLastlos;
私有系统.Nullable DrehzahlMaxonmotor;
私有系统.Nullable_SollwertDrehmMaxon;
私有系统。可为空的_istwertdremmaxondr1;
私有系统。可为空的_istwertdremmaxondr2;
私有系统。可空_RueckdrehmSollImLauf;
私有系统。可为空的_RuedrehmIstImLaufDR1;
私有系统。可为空的_RuedrehmIstImLaufDR2;
私有系统。可为空_RuedrehmSollLosbrechen;
私有系统。可为空的_RuedrehmIstLosbrDR1;
私有系统。可为空的_RuedrehmIstLosbrDR2;
私有系统.Nullable_sollwverdspgetriebe;
私有系统。可空_istwverdspgetriebe;
私有系统.Nullable _sollverdrespgeber;
私有系统。可空_istwverdrespgeber;
私有字符串_serialnumer;
错误:
重载的System.Data.Linq.Table INSERTONSUPMIT(STW_PruefStand.Messdaten-)的最佳匹配项没有无效的方法
1-参数:无法从“STW\u PruefStand.Messdaten”中的“STW\u PruefStand.Form1.Messdaten”转换
InsertAllOnSubmit
用于插入数据库中的对象集合。此处仅处理一个对象,因此正确的使用方法是InsertOnSubmit
:
ctxMess.Messdaten.InsertOnSubmit(messSchreiben);
更新。问题更新后,新问题似乎与命名有关。struct和context类都有名称Messdaten
,这是误导性的。例如,此行:
var messSchreiben = new Messdaten()
实例化类型为STW_PruefStand.Form1.Messdaten
(结构)的对象,同时根据方法的逻辑,它应该是上下文类。请尝试显式指定命名空间:
var messSchreiben = new STW_PruefStand.Messdaten()
{
...
您应该使用
InsertOnSubmit()
,因为您只添加了一个对象
请参阅MSDN链接和以了解差异。是的,这确实解决了部分问题,但现在我得到了以下错误:重载系统的最佳匹配。Data.Linq.Table InsertOnSubmit(Project.MeasuredData)-.method没有一些无效参数…正如我所说的,除了最后一个SerialNummer变量,即string,它们都是双精度的…在db中,它们都是浮点,SerialNummer是nChar…问题可能来自这里吗?@BoraBogdan,显示错误的是同一个代码吗?问题中的代码处理
Messdaten
类。是的,MeasureData指应插入数据的db表。错误由同一InsertOnSubmit给出line@BoraBogdan,噢,我现在似乎明白了问题所在。ctxMess.Messdaten
是一个包含Project.MeasuredData
对象的表,而正在尝试插入类型为Messdaten
的对象。很可能您需要更改为插入构建对象的方式,如下所示:var messchreiben=new Project.MeasuredData
。这有意义吗?@BoraBogdan,nChar的大小是多少?为什么要使用nChar?此外,您在第一次提交时发现了一个异常hanges(),将其写入控制台,然后再次尝试提交changes()?这似乎令人困惑。