Linq数据库插入错误

时间:2013-07-31 11:24:29

标签: c# database linq

所以我有以下方法:

  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   ) - 。方法不能通过推论得出   句法。明确输入类型参数

另外,我的变量是double类型,而在数据库中它们保存为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;

错误: 重载的System.Data.Linq.Table InsertOnSubmit的最佳匹配(STW_PruefStand.Messdaten - 。没有一些无效的方法

1 - 参数:无法转换为“”STW_PruefStand.Messdaten“中的'STW_PruefStand.Form1.Messdaten”

2 个答案:

答案 0 :(得分:3)

InsertAllOnSubmit用于要插入数据库的对象集合。在这里,您只处理一个对象,因此使用的正确方法是InsertOnSubmit

ctxMess.Messdaten.InsertOnSubmit(messSchreiben);

更新。问题更新后,新问题似乎与命名有关。 struct和context类都有名称Messdaten,这是误导性的。例如,这一行:

var messSchreiben = new Messdaten()

实例化类型STW_PruefStand.Form1.Messdaten(结构)的对象,而根据方法的逻辑,它应该是上下文类。尝试明确指定命名空间:

var messSchreiben = new STW_PruefStand.Messdaten()
{
...

答案 1 :(得分:0)

您应该使用InsertOnSubmit(),因为您只是添加一个对象

参见 MSDN 链接InsertOnSubmit()&amp; InsertAllOnSubmit()表示差异。