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()?这似乎令人困惑。